package jazz.lang;

///////////////////////////////////////////////////////////////////////////////
//
//                                  Booleans
//
///////////////////////////////////////////////////////////////////////////////

public native final class boolean implements BooleanAlgebra {
}

///////////////////////////////////////////////////////////////////////////////
//
//                               Implementation
//
///////////////////////////////////////////////////////////////////////////////

Builtin.(&)(x@boolean, y@boolean) = x ? y : (y ? false : false);
Builtin.(|)(x@boolean, y@boolean) = x ? (y ? true : true) : y;
Builtin.(^)(x@boolean, y@boolean) = (x & !y) | (y & !x);
Builtin.(~)(x@boolean) = !x;
Builtin.cond(x@boolean, y@boolean, z@boolean) = x ? y : z;