Changeset 6077


Ignore:
Timestamp:
03/04/04 10:48:48 (17 years ago)
Author:
piso
Message:

Read floats correctly when *READ-BASE* is not 10.

File:
1 edited

Legend:

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

    r6059 r6077  
    33 *
    44 * Copyright (C) 2003-2004 Peter Graves
    5  * $Id: Stream.java,v 1.31 2004-03-02 20:32:46 piso Exp $
     5 * $Id: Stream.java,v 1.32 2004-03-04 10:48:48 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    784784            return NIL;
    785785        final char firstChar = token.charAt(0);
     786        if ("-+0123456789".indexOf(firstChar) >= 0) {
     787            LispObject number = makeNumber(token, getReadBase());
     788            if (number != null)
     789                return number;
     790        }
    786791        final int radix = getReadBase();
    787         if (radix == 10) {
    788             if ("-+0123456789".indexOf(firstChar) >= 0) {
    789                 LispObject number = makeNumber(token, radix);
    790                 if (number != null)
    791                     return number;
    792             }
    793         } else {
    794             boolean numeric = true;
    795             for (int i = token.length(); i-- > 0;) {
    796                 char c = token.charAt(i);
    797                 if (c == '-')
    798                     ;
    799                 else if (c == '+')
    800                     ;
    801                 else if (c == '/')
    802                     ;
    803                 else if (c == '.')
    804                     ;
    805                 else if (Character.digit(c, radix) < 0) {
    806                     numeric = false;
    807                     break;
    808                 }
    809             }
    810             if (numeric)
    811                 return makeNumber(token, radix);
     792        if (Character.digit(firstChar, radix) >= 0) {
     793            LispObject number = makeNumber(token, radix);
     794            if (number != null)
     795                return number;
    812796        }
    813797        if (token.equals("T"))
     
    882866        }
    883867        boolean numeric = true;
    884         // The first character was checked in makeObject().
    885868        if (radix == 10) {
    886             for (int i = token.length(); i-- > 1;) {
     869            for (int i = token.length(); i-- > 0;) {
    887870                char c = token.charAt(i);
    888871                if (c < '0' || c > '9') {
    889                     numeric = false;
    890                     break;
     872                    if (i > 0 || (c != '-' && c != '+')) {
     873                        numeric = false;
     874                        break;
     875                    }
    891876                }
    892877            }
    893878        } else {
    894             for (int i = token.length(); i-- > 1;) {
     879            for (int i = token.length(); i-- > 0;) {
    895880                char c = token.charAt(i);
    896881                if (Character.digit(c, radix) < 0) {
    897                     numeric = false;
    898                     break;
     882                    if (i > 0 || (c != '-' && c != '+')) {
     883                        numeric = false;
     884                        break;
     885                    }
    899886                }
    900887            }
Note: See TracChangeset for help on using the changeset viewer.