Changeset 8766


Ignore:
Timestamp:
03/14/05 13:50:37 (16 years ago)
Author:
piso
Message:

equalp(): don't signal an error.

File:
1 edited

Legend:

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

    r8198 r8766  
    22 * Complex.java
    33 *
    4  * Copyright (C) 2003-2004 Peter Graves
    5  * $Id: Complex.java,v 1.31 2004-11-28 15:43:49 piso Exp $
     4 * Copyright (C) 2003-2005 Peter Graves
     5 * $Id: Complex.java,v 1.32 2005-03-14 13:50:37 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    4646            realpart = LispFloat.coerceToFloat(realpart);
    4747        if (imagpart instanceof Fixnum) {
    48             if (((Fixnum)imagpart).getValue() == 0)
     48            if (((Fixnum)imagpart).value == 0)
    4949                return realpart;
    5050        }
     
    113113    public boolean equalp(LispObject obj) throws ConditionThrowable
    114114    {
    115         return isEqualTo(obj);
     115        if (this == obj)
     116            return true;
     117        if (obj instanceof Complex) {
     118            Complex c = (Complex) obj;
     119            return (realpart.isEqualTo(c.realpart) &&
     120                    imagpart.isEqualTo(c.imagpart));
     121        }
     122        if (obj.numberp()) {
     123            // obj is a number, but not complex.
     124            if (imagpart instanceof LispFloat) {
     125                if (((LispFloat)imagpart).value == 0) {
     126                    if (obj instanceof Fixnum)
     127                        return ((Fixnum)obj).value == ((LispFloat)realpart).value;
     128                    if (obj instanceof LispFloat)
     129                        return ((LispFloat)obj).value == ((LispFloat)realpart).value;
     130                }
     131            }
     132        }
     133        return false;
    116134    }
    117135
     
    192210            // obj is a number, but not complex.
    193211            if (imagpart instanceof LispFloat) {
    194                 if (((LispFloat)imagpart).getValue() == 0) {
     212                if (((LispFloat)imagpart).value == 0) {
    195213                    if (obj instanceof Fixnum)
    196                         return ((Fixnum)obj).getValue() == ((LispFloat)realpart).getValue();
     214                        return ((Fixnum)obj).value == ((LispFloat)realpart).value;
    197215                    if (obj instanceof LispFloat)
    198                         return ((LispFloat)obj).getValue() == ((LispFloat)realpart).getValue();
     216                        return ((LispFloat)obj).value == ((LispFloat)realpart).value;
    199217                }
    200218            }
    201219            return false;
    202220        }
    203         signal(new TypeError(obj, "number"));
     221        signal(new TypeError(obj, Symbol.NUMBER));
    204222        // Not reached.
    205223        return false;
     
    213231    public LispObject ABS() throws ConditionThrowable
    214232    {
    215         double real = LispFloat.coerceToFloat(realpart).getValue();
    216         double imag = LispFloat.coerceToFloat(imagpart).getValue();
     233        double real = LispFloat.coerceToFloat(realpart).value;
     234        double imag = LispFloat.coerceToFloat(imagpart).value;
    217235        return new LispFloat(Math.sqrt(real * real + imag * imag));
    218236    }
Note: See TracChangeset for help on using the changeset viewer.