Changeset 7403


Ignore:
Timestamp:
08/15/04 11:25:07 (17 years ago)
Author:
piso
Message:

%STRING=, %%STRING=

File:
1 edited

Legend:

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

    r7279 r7403  
    33 *
    44 * Copyright (C) 2003-2004 Peter Graves
    5  * $Id: StringFunctions.java,v 1.25 2004-07-20 15:28:39 piso Exp $
     5 * $Id: StringFunctions.java,v 1.26 2004-08-15 11:25:07 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    2727    // Case sensitive.
    2828    private static final Primitive _STRING_EQUAL =
    29         new Primitive("%string=", PACKAGE_SYS, true)
    30     {
    31         public LispObject execute(LispObject[] args) throws ConditionThrowable
    32         {
    33             if (args.length != 6)
    34                 return signal(new WrongNumberOfArgumentsException(this));
    35             char[] array1 = string(args[0]).chars();
    36             char[] array2 = string(args[1]).chars();
    37             int start1 = Fixnum.getInt(args[2]);
    38             int end1 = Fixnum.getInt(args[3]);
    39             int start2 = Fixnum.getInt(args[4]);
    40             int end2 = Fixnum.getInt(args[5]);
     29        new Primitive("%string=", PACKAGE_SYS, false)
     30    {
     31        public LispObject execute(LispObject[] args) throws ConditionThrowable
     32        {
     33            if (args.length != 6)
     34                return signal(new WrongNumberOfArgumentsException(this));
     35            char[] array1 = args[0].STRING().chars();
     36            char[] array2 = args[1].STRING().chars();
     37            int start1, end1, start2, end2;
     38            try {
     39                start1 = ((Fixnum)args[2]).value;
     40            }
     41            catch (ClassCastException e) {
     42                return signal(new TypeError(args[2], Symbol.FIXNUM));
     43            }
     44            if (args[3] == NIL) {
     45                end1 = array1.length;
     46            } else {
     47                try {
     48                    end1 = ((Fixnum)args[3]).value;
     49                }
     50                catch (ClassCastException e) {
     51                    return signal(new TypeError(args[3], Symbol.FIXNUM));
     52                }
     53            }
     54            try {
     55                start2 = ((Fixnum)args[4]).value;
     56            }
     57            catch (ClassCastException e) {
     58                return signal(new TypeError(args[4], Symbol.FIXNUM));
     59            }
     60            if (args[5] == NIL) {
     61                end2 = array2.length;
     62            } else {
     63                try {
     64                    end2 = ((Fixnum)args[5]).value;
     65                }
     66                catch (ClassCastException e) {
     67                    return signal(new TypeError(args[5], Symbol.FIXNUM));
     68                }
     69            }
    4170            if ((end1 - start1) != (end2 - start2))
    4271                return NIL;
     
    5180                Debug.trace(e);
    5281                return NIL;
     82            }
     83            return T;
     84        }
     85    };
     86
     87    // ### %%string=
     88    // Case sensitive.
     89    private static final Primitive2 __STRING_EQUAL =
     90        new Primitive2("%%string=", PACKAGE_SYS, false)
     91    {
     92        public LispObject execute(LispObject first, LispObject second)
     93            throws ConditionThrowable
     94        {
     95            char[] array1 = first.STRING().chars();
     96            char[] array2 = second.STRING().chars();
     97            if (array1.length != array2.length)
     98                return NIL;
     99            for (int i = array1.length; i-- > 0;) {
     100                if (array1[i] != array2[i])
     101                    return NIL;
    53102            }
    54103            return T;
Note: See TracChangeset for help on using the changeset viewer.