module Enumerable

def find_index(object = undefined, &block)

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