Changeset 8256


Ignore:
Timestamp:
12/16/04 17:30:28 (17 years ago)
Author:
piso
Message:

Use LispObject.logand(LispObject).

File:
1 edited

Legend:

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

    r6073 r8256  
    33 *
    44 * Copyright (C) 2003-2004 Peter Graves
    5  * $Id: logand.java,v 1.10 2004-03-04 01:26:58 piso Exp $
     5 * $Id: logand.java,v 1.11 2004-12-16 17:30:28 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    4141        throws ConditionThrowable
    4242    {
    43         if (first instanceof Fixnum && second instanceof Fixnum) {
    44             return new Fixnum(((Fixnum)first).value &
    45                               ((Fixnum)second).value);
    46         } else {
    47             BigInteger n1, n2;
    48             if (first instanceof Fixnum)
    49                 n1 = ((Fixnum)first).getBigInteger();
    50             else if (first instanceof Bignum)
    51                 n1 = ((Bignum)first).value;
    52             else
    53                 return signal(new TypeError(first, Symbol.INTEGER));
    54             if (second instanceof Fixnum)
    55                 n2 = ((Fixnum)second).getBigInteger();
    56             else if (second instanceof Bignum)
    57                 n2 = ((Bignum)second).value;
    58             else
    59                 return signal(new TypeError(second, Symbol.INTEGER));
    60             return number(n1.and(n2));
    61         }
     43        return first.logand(second);
    6244    }
    6345
    6446    public LispObject execute(LispObject[] args) throws ConditionThrowable
    6547    {
    66         BigInteger result = BigInteger.valueOf(-1);
    67         for (int i = 0; i < args.length; i++) {
    68             BigInteger n;
    69             if (args[i] instanceof Fixnum)
    70                 n = ((Fixnum)args[i]).getBigInteger();
    71             else if (args[i] instanceof Bignum)
    72                 n = ((Bignum)args[i]).value;
    73             else
    74                 return signal(new TypeError(args[i], Symbol.INTEGER));
    75             result = result.and(n);
    76         }
    77         return number(result);
     48        LispObject result = Fixnum.MINUS_ONE;
     49        for (int i = 0; i < args.length; i++)
     50            result = result.logand(args[i]);
     51        return result;
    7852    }
    7953
Note: See TracChangeset for help on using the changeset viewer.