package erjang.m.erlang; import kilim.Pausable; import erjang.BIF; import erjang.EAtom; import erjang.EInteger; import erjang.ENumber; import erjang.EObject; import erjang.EProc; import erjang.ERT; import erjang.ESmall; import erjang.BIF.Type; public class BinOps { @BIF(name="andalso",type=Type.GUARD) static public EAtom andalso_guard(EObject o1, EObject o2) { if (o1 == ERT.TRUE && o2 == ERT.TRUE) return ERT.TRUE; if (o1.testBoolean() == null || o2.testBoolean() == null) return null; return ERT.FALSE; } @BIF(name="orelse",type=Type.GUARD) static public EAtom orelse_guard(EObject o1, EObject o2) { if (o1 == ERT.TRUE || o2 == ERT.TRUE) return ERT.TRUE; if (o1.testBoolean() == null || o2.testBoolean() == null) return null; return ERT.FALSE; } @BIF(name="band",type=Type.GUARD) static public ENumber band_guard(EObject o1, EObject o2) { EInteger n1; EInteger n2; if ((n1=o1.testInteger()) != null) { if ((n2=o2.testInteger()) != null) { return n1.band(n2); } } return null; } @BIF static public EInteger band(EObject o1, EObject o2) { return o1.band(o2); } @BIF static public EInteger bor(EObject o1, EObject o2) { return o1.bor(o2); } @BIF static public EInteger bsr(EObject o1, EObject o2) { return o1.bsr(o2); } @BIF static public EInteger bsl(EObject o1, EObject o2) { return o1.bsl(o2); } @BIF static public EInteger bsl(EInteger o1, ESmall o2) { return o1.bsl(o2); } @BIF(name=">=") static public EAtom ge(EObject o1, EObject o2) { return o1.ge(o2); } @BIF static public EObject send(EProc proc, EObject pid, EObject msg) throws Pausable { return ERT.send(proc, pid, msg); } }