Changeset 8519


Ignore:
Timestamp:
02/10/05 01:55:30 (16 years ago)
Author:
piso
Message:

public LispObject MOD(int divisor)

File:
1 edited

Legend:

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

    r8285 r8519  
    22 * Fixnum.java
    33 *
    4  * Copyright (C) 2002-2004 Peter Graves
    5  * $Id: Fixnum.java,v 1.107 2004-12-23 12:30:04 piso Exp $
     4 * Copyright (C) 2002-2005 Peter Graves
     5 * $Id: Fixnum.java,v 1.108 2005-02-10 01:55:30 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    595595    public LispObject MOD(LispObject divisor) throws ConditionThrowable
    596596    {
    597         if (divisor instanceof Fixnum) {
    598             final int d = ((Fixnum)divisor).value;
    599             final int r;
    600             try {
    601                 r = value % d;
    602             }
    603             catch (ArithmeticException e) {
    604                 return signal(new ArithmeticError("Division by zero."));
    605             }
    606             if (r == 0)
    607                 return Fixnum.ZERO;
    608             if (d < 0) {
    609                 if (value > 0)
    610                     return new Fixnum(r + d);
    611             } else {
    612                 if (value < 0)
    613                     return new Fixnum(r + d);
    614             }
    615             return new Fixnum(r);
    616         }
     597        if (divisor instanceof Fixnum)
     598            return MOD(((Fixnum)divisor).value);
    617599        return super.MOD(divisor);
     600    }
     601
     602    public LispObject MOD(int divisor) throws ConditionThrowable
     603    {
     604        final int r;
     605        try {
     606            r = value % divisor;
     607        }
     608        catch (ArithmeticException e) {
     609            return signal(new ArithmeticError("Division by zero."));
     610        }
     611        if (r == 0)
     612            return Fixnum.ZERO;
     613        if (divisor < 0) {
     614            if (value > 0)
     615                return new Fixnum(r + divisor);
     616        } else {
     617            if (value < 0)
     618                return new Fixnum(r + divisor);
     619        }
     620        return new Fixnum(r);
    618621    }
    619622
Note: See TracChangeset for help on using the changeset viewer.