1 21 22 package org.armedbear.lisp; 23 24 import java.math.BigInteger ; 25 26 public final class logtest extends Primitive2 30 { 31 private logtest() 32 { 33 super("logtest","integer-1 integer-2"); 34 } 35 36 public LispObject execute(LispObject first, LispObject second) 37 throws ConditionThrowable 38 { 39 if (first instanceof Fixnum && second instanceof Fixnum) { 40 return (((Fixnum)first).getValue() & ((Fixnum)second).getValue()) == 0 ? NIL : T; 41 } else { 42 BigInteger n1, n2; 43 if (first instanceof Fixnum) 44 n1 = ((Fixnum)first).getBigInteger(); 45 else if (first instanceof Bignum) 46 n1 = ((Bignum)first).getValue(); 47 else 48 return signal(new TypeError(first, "integer")); 49 if (second instanceof Fixnum) 50 n2 = ((Fixnum)second).getBigInteger(); 51 else if (second instanceof Bignum) 52 n2 = ((Bignum)second).getValue(); 53 else 54 return signal(new TypeError(second, "integer")); 55 return n1.and(n2).signum() == 0 ? NIL : T; 56 } 57 } 58 59 private static final logtest LOGTEST = new logtest(); 60 } 61 | Popular Tags |