1 21 22 package org.armedbear.lisp; 23 24 import java.math.BigInteger ; 25 26 public final class lognand extends Primitive2 27 { 28 private lognand() 29 { 30 super("lognand", "integer-1 integer-2"); 31 } 32 33 public LispObject execute(LispObject first, LispObject second) 34 throws ConditionThrowable 35 { 36 if (first instanceof Fixnum) { 37 if (second instanceof Fixnum) 38 return new Fixnum(~(((Fixnum)first).value & 39 ((Fixnum)second).value)); 40 if (second instanceof Bignum) { 41 BigInteger n1 = ((Fixnum)first).getBigInteger(); 42 BigInteger n2 = ((Bignum)second).value; 43 return number(n1.and(n2).not()); 44 } 45 return signal(new TypeError(second, Symbol.INTEGER)); 46 } 47 if (first instanceof Bignum) { 48 BigInteger n1 = ((Bignum)first).value; 49 if (second instanceof Fixnum) { 50 BigInteger n2 = ((Fixnum)second).getBigInteger(); 51 return number(n1.and(n2).not()); 52 } 53 if (second instanceof Bignum) { 54 BigInteger n2 = ((Bignum)second).value; 55 return number(n1.and(n2).not()); 56 } 57 return signal(new TypeError(second, Symbol.INTEGER)); 58 } 59 return signal(new TypeError(first, Symbol.INTEGER)); 60 } 61 62 private static final Primitive2 LOGNAND = new lognand(); 63 } 64 | Popular Tags |