Changeset 5928


Ignore:
Timestamp:
02/24/04 14:03:57 (17 years ago)
Author:
piso
Message:

SCHAR, %SET-SCHAR

File:
1 edited

Legend:

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

    r5925 r5928  
    33 *
    44 * Copyright (C) 2004 Peter Graves
    5  * $Id: SimpleString.java,v 1.5 2004-02-24 12:54:25 piso Exp $
     5 * $Id: SimpleString.java,v 1.6 2004-02-24 14:03:57 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    394394        return cachedHashCode = hashCode;
    395395    }
     396
     397    // ### schar
     398    private static final Primitive2 SCHAR = new Primitive2("schar", "string index")
     399    {
     400        public LispObject execute(LispObject first, LispObject second)
     401            throws ConditionThrowable
     402        {
     403            try {
     404                return LispCharacter.getInstance(((SimpleString)first).chars[((Fixnum)second).value]);
     405            }
     406            catch (ClassCastException e) {
     407                if (first instanceof SimpleString)
     408                    return signal(new TypeError(second, Symbol.FIXNUM));
     409                else
     410                    return signal(new TypeError(first, Symbol.SIMPLE_STRING));
     411            }
     412        }
     413    };
     414
     415    // ### %set-schar
     416    private static final Primitive3 _SET_SCHAR =
     417        new Primitive3("%set-schar", PACKAGE_SYS, false)
     418    {
     419        public LispObject execute(LispObject first, LispObject second,
     420                                  LispObject third)
     421            throws ConditionThrowable
     422        {
     423            try {
     424                ((SimpleString)first).chars[((Fixnum)second).value] =
     425                    ((LispCharacter)third).value;
     426                return third;
     427            }
     428            catch (ClassCastException e) {
     429                if (!(first instanceof SimpleString))
     430                    return signal(new TypeError(first, Symbol.SIMPLE_STRING));
     431                if (!(second instanceof Fixnum))
     432                    return signal(new TypeError(second, Symbol.FIXNUM));
     433                return signal(new TypeError(third, Symbol.CHARACTER));
     434            }
     435        }
     436    };
    396437}
Note: See TracChangeset for help on using the changeset viewer.