Changeset 6001


Ignore:
Timestamp:
02/27/04 02:43:31 (17 years ago)
Author:
piso
Message:

Work in progress.

File:
1 edited

Legend:

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

    r5994 r6001  
    33 *
    44 * Copyright (C) 2002-2004 Peter Graves
    5  * $Id: Primitives.java,v 1.584 2004-02-26 19:30:46 piso Exp $
     5 * $Id: Primitives.java,v 1.585 2004-02-27 02:43:31 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    12871287    };
    12881288
     1289    // ### %format
    12891290    private static final Primitive _FORMAT =
    12901291        new Primitive("%format", PACKAGE_SYS, false)
     
    18121813    // row-major-aref array index => element
    18131814    private static final Primitive2 ROW_MAJOR_AREF =
    1814         new Primitive2("row-major-aref","array index") {
    1815         public LispObject execute(LispObject first, LispObject second)
    1816             throws ConditionThrowable
    1817         {
    1818             return checkArray(first).getRowMajor(Fixnum.getValue(second));
     1815        new Primitive2("row-major-aref", "array index")
     1816    {
     1817        public LispObject execute(LispObject first, LispObject second)
     1818            throws ConditionThrowable
     1819        {
     1820            try {
     1821                return ((AbstractArray)first).getRowMajor(((Fixnum)second).value);
     1822            }
     1823            catch (ClassCastException e) {
     1824                if (first instanceof AbstractArray)
     1825                    return signal(new TypeError(second, Symbol.FIXNUM));
     1826                else
     1827                    return signal(new TypeError(first, Symbol.ARRAY));
     1828            }
    18191829        }
    18201830    };
     
    18301840        {
    18311841            try {
    1832                 ((AbstractArray)first).setRowMajor(Fixnum.getValue(second), third);
     1842                ((AbstractArray)first).setRowMajor(((Fixnum)second).value, third);
    18331843                return third;
    18341844            }
    18351845            catch (ClassCastException e) {
    1836                 signal(new TypeError(first, "array"));
    1837                 return NIL;
     1846                if (first instanceof AbstractArray)
     1847                    return signal(new TypeError(second, Symbol.FIXNUM));
     1848                else
     1849                    return signal(new TypeError(first, Symbol.ARRAY));
    18381850            }
    18391851        }
     
    18591871        {
    18601872            try {
    1861                 ((AbstractVector)first).set(Fixnum.getValue(second), third);
     1873                ((AbstractVector)first).set(((Fixnum)second).value, third);
    18621874                return third;
    18631875            }
    18641876            catch (ClassCastException e) {
    1865                 signal(new TypeError(first, "vector"));
    1866                 return NIL;
     1877                if (first instanceof AbstractVector)
     1878                    return signal(new TypeError(second, Symbol.FIXNUM));
     1879                else
     1880                    return signal(new TypeError(first, Symbol.VECTOR));
    18671881            }
    18681882        }
     
    18761890            throws ConditionThrowable
    18771891        {
    1878             int fillPointer = -1;
    1879             if (arg instanceof AbstractVector)
    1880                 fillPointer = ((AbstractVector)arg).getFillPointer();
    1881             if (fillPointer >= 0)
    1882                 return new Fixnum(fillPointer);
    1883             if (arg instanceof AbstractArray)
    1884                 return ((AbstractArray)arg).noFillPointer();
    1885             else
     1892            try {
     1893                return new Fixnum(((AbstractArray)arg).getFillPointer());
     1894            }
     1895            catch (ClassCastException e) {
    18861896                return signal(new TypeError(arg, Symbol.ARRAY));
    1887         }
    1888     };
    1889 
    1890     // ### %set-fill-pointer
     1897            }
     1898        }
     1899    };
     1900
     1901    // ### %set-fill-pointer vector new-fill-pointer
    18911902    private static final Primitive2 _SET_FILL_POINTER =
    18921903        new Primitive2("%set-fill-pointer", PACKAGE_SYS, false) {
     
    18941905            throws ConditionThrowable
    18951906        {
    1896             AbstractVector v = checkVector(first);
    1897             if (v.getFillPointer() < 0)
    1898                 v.noFillPointer();
    1899             v.setFillPointer(second);
    1900             return second;
     1907            try {
     1908                AbstractVector v = (AbstractVector) first;
     1909                if (v.hasFillPointer())
     1910                    v.setFillPointer(second);
     1911                else
     1912                    v.noFillPointer();
     1913                return second;
     1914            }
     1915            catch (ClassCastException e) {
     1916                return signal(new TypeError(first, Symbol.VECTOR));
     1917            }
    19011918        }
    19021919    };
Note: See TracChangeset for help on using the changeset viewer.