Changeset 3624


Ignore:
Timestamp:
09/08/03 17:16:28 (19 years ago)
Author:
piso
Message:

%MAKE-ARRAY
UPGRADED-ARRAY-ELEMENT-TYPE

File:
1 edited

Legend:

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

    r3617 r3624  
    33 *
    44 * Copyright (C) 2002-2003 Peter Graves
    5  * $Id: Primitives.java,v 1.376 2003-09-08 13:34:38 piso Exp $
     5 * $Id: Primitives.java,v 1.377 2003-09-08 17:16:28 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    19001900                }
    19011901                AbstractVector v;
    1902                 if (elementType == Symbol.CHARACTER ||
    1903                     elementType == Symbol.BASE_CHAR ||
    1904                     elementType == Symbol.STANDARD_CHAR ||
    1905                     elementType == Symbol.NIL) {
     1902                LispObject upgradedType =
     1903                    getUpgradedArrayElementType(elementType);
     1904                if (upgradedType == Symbol.CHARACTER)
    19061905                    v = new LispString(size);
    1907                 } else if (elementType == Symbol.BIT) {
     1906                else if (elementType == Symbol.BIT)
    19081907                    v = new BitVector(size);
    1909                 } else {
    1910                     // FIXME If elementType != null it should be a known type.
     1908                else
    19111909                    v = new Vector(size);
    1912                 }
    19131910                if (initialElementProvided != NIL) {
    19141911                    // Initial element was specified.
     
    19501947        }
    19511948    };
     1949
     1950    // ### upgraded-array-element-type
     1951    // upgraded-array-element-type typespec &optional environment
     1952    // => upgraded-typespec
     1953    private static final Primitive UPGRADED_ARRAY_ELEMENT_TYPE =
     1954        new Primitive("upgraded-array-element-type") {
     1955        public LispObject execute(LispObject arg) throws LispError
     1956        {
     1957            return getUpgradedArrayElementType(arg);
     1958        }
     1959        public LispObject execute(LispObject first, LispObject second)
     1960            throws LispError
     1961        {
     1962            // Ignore environment.
     1963            return getUpgradedArrayElementType(first);
     1964        }
     1965    };
     1966
     1967    private static final LispObject getUpgradedArrayElementType(LispObject type)
     1968    {
     1969        if (type == Symbol.CHARACTER || type == Symbol.BASE_CHAR || type == Symbol.STANDARD_CHAR)
     1970            return Symbol.CHARACTER;
     1971        if (type == Symbol.BIT)
     1972            return Symbol.BIT;
     1973        if (type == NIL)
     1974            return Symbol.CHARACTER;
     1975        return T;
     1976    }
    19521977
    19531978    // ### array-rank
Note: See TracChangeset for help on using the changeset viewer.