module Enumerable

def count(object = undefined, &block)

def count(object = undefined, &block)
  %x{
    var result = 0;
    if (object != null) {
      block = function(obj) { return #{ `obj` == `object` }; };
    }
    else if (block === nil) {
      block = function() { return true; };
    }
    var proc = function(obj) {
      var value;
      if ((value = block(obj)) === __breaker) {
        return __breaker.$v;
      }
      if (value !== false && value !== nil) {
        result++;
      }
    }
    #{self}.$each(proc);
    return result;
  }
end