     else
       @_ended = true
       @_end callback
+  end: @::free

        callback.apply null, arguments
    @

  end: (callback) ->
    throw new InvalidArgumentError("end() requires a callback argument")  unless typeof callback is "function"
    return callback(new AlreadyEndError("end() already called on iterator"))  if @_ended
    if @_indexOfKeys?

      return @_endSync()
    else
      throw new NotImplementedError()
  endSync: @::freeSync

  nextKeys: (callback) ->
    @_nexting = true
