Changeset 8639


Ignore:
Timestamp:
02/26/05 17:31:28 (16 years ago)
Author:
piso
Message:

INTERACTIVE-EVAL
getUpgradedArrayElementType()

File:
1 edited

Legend:

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

    r8604 r8639  
    33 *
    44 * Copyright (C) 2002-2005 Peter Graves
    5  * $Id: Lisp.java,v 1.321 2005-02-18 14:31:11 piso Exp $
     5 * $Id: Lisp.java,v 1.322 2005-02-26 17:31:28 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    226226        {
    227227            final LispThread thread = LispThread.currentThread();
    228             Symbol.MINUS.setSymbolValue(object);
     228            thread.setSpecialVariable(Symbol.MINUS, object);
    229229            LispObject result;
    230230            try {
     
    235235            }
    236236            catch (StackOverflowError e) {
     237                thread.setSpecialVariable(_SAVED_BACKTRACE_,
     238                                          thread.backtraceAsList(0));
    237239                return signal(new StorageCondition("Stack overflow."));
    238240            }
     
    242244            catch (Throwable t) {
    243245                Debug.trace(t);
    244                 thread.bindSpecial(_SAVED_BACKTRACE_,
    245                                    thread.backtraceAsList(0));
     246                thread.setSpecialVariable(_SAVED_BACKTRACE_,
     247                                          thread.backtraceAsList(0));
    246248                return signal(new LispError("Caught " + t + "."));
    247249            }
    248250            Debug.assertTrue(result != null);
    249             Symbol.STAR_STAR_STAR.setSymbolValue(Symbol.STAR_STAR.getSymbolValue());
    250             Symbol.STAR_STAR.setSymbolValue(Symbol.STAR.getSymbolValue());
    251             Symbol.STAR.setSymbolValue(result);
    252             Symbol.PLUS_PLUS_PLUS.setSymbolValue(Symbol.PLUS_PLUS.getSymbolValue());
    253             Symbol.PLUS_PLUS.setSymbolValue(Symbol.PLUS.getSymbolValue());
    254             Symbol.PLUS.setSymbolValue(Symbol.MINUS.getSymbolValue());
     251            thread.setSpecialVariable(Symbol.STAR_STAR_STAR,
     252                                      thread.safeSymbolValue(Symbol.STAR_STAR));
     253            thread.setSpecialVariable(Symbol.STAR_STAR,
     254                                      thread.safeSymbolValue(Symbol.STAR));
     255            thread.setSpecialVariable(Symbol.STAR, result);
     256            thread.setSpecialVariable(Symbol.PLUS_PLUS_PLUS,
     257                                      thread.safeSymbolValue(Symbol.PLUS_PLUS));
     258            thread.setSpecialVariable(Symbol.PLUS_PLUS,
     259                                      thread.safeSymbolValue(Symbol.PLUS));
     260            thread.setSpecialVariable(Symbol.PLUS,
     261                                      thread.safeSymbolValue(Symbol.MINUS));
    255262            LispObject[] values = thread.getValues();
    256             Symbol.SLASH_SLASH_SLASH.setSymbolValue(Symbol.SLASH_SLASH.getSymbolValue());
    257             Symbol.SLASH_SLASH.setSymbolValue(Symbol.SLASH.getSymbolValue());
     263            thread.setSpecialVariable(Symbol.SLASH_SLASH_SLASH,
     264                                      thread.safeSymbolValue(Symbol.SLASH_SLASH));
     265            thread.setSpecialVariable(Symbol.SLASH_SLASH,
     266                                      thread.safeSymbolValue(Symbol.SLASH));
    258267            if (values != null) {
    259268                LispObject slash = NIL;
    260269                for (int i = values.length; i-- > 0;)
    261270                    slash = new Cons(values[i], slash);
    262                 Symbol.SLASH.setSymbolValue(slash);
    263             } else {
    264                 Symbol.SLASH.setSymbolValue(new Cons(result));
    265             }
     271                thread.setSpecialVariable(Symbol.SLASH, slash);
     272            } else
     273                thread.setSpecialVariable(Symbol.SLASH, new Cons(result));
    266274            return result;
    267275        }
     
    839847
    840848    public static final LispObject getUpgradedArrayElementType(LispObject type)
    841     {
    842         if (type == Symbol.CHARACTER || type == Symbol.BASE_CHAR || type == Symbol.STANDARD_CHAR)
    843             return Symbol.CHARACTER;
     849        throws ConditionThrowable
     850    {
     851        if (type instanceof Symbol) {
     852            if (type == Symbol.CHARACTER ||
     853                type == Symbol.BASE_CHAR ||
     854                type == Symbol.STANDARD_CHAR)
     855                return Symbol.CHARACTER;
     856            if (type == Symbol.BIT)
     857                return Symbol.BIT;
     858            if (type == NIL)
     859                return NIL;
     860        }
    844861        if (type == BuiltInClass.CHARACTER)
    845862            return Symbol.CHARACTER;
    846         if (type == Symbol.BIT)
    847             return Symbol.BIT;
    848         if (type == NIL)
    849             return NIL;
     863        if (type instanceof Cons) {
     864            if (type.car() == Symbol.INTEGER) {
     865                if (type.cadr().eql(Fixnum.ZERO)) {
     866                    if (type.cdr().cadr().eql(Fixnum.ONE))
     867                        return Symbol.BIT;
     868                }
     869            }
     870        }
    850871        return T;
    851872    }
     
    860881        }
    861882        catch (ClassCastException e) {
    862             signal(new TypeError(obj, "character"));
     883            signal(new TypeError(obj, Symbol.CHARACTER));
    863884            // Not reached.
    864885            return null;
     
    875896        }
    876897        catch (ClassCastException e) {
    877             signal(new TypeError(obj, "package"));
     898            signal(new TypeError(obj, Symbol.PACKAGE));
    878899            // Not reached.
    879900            return null;
Note: See TracChangeset for help on using the changeset viewer.