| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | "use strict";var isArguments = require("es5-ext/function/is-arguments")  , callable    = require("es5-ext/object/valid-callable")  , isString    = require("es5-ext/string/is-string")  , get         = require("./get");var isArray = Array.isArray, call = Function.prototype.call, some = Array.prototype.some;module.exports = function (iterable, cb /*, thisArg*/) {	var mode, thisArg = arguments[2], result, doBreak, broken, i, length, char, code;	if (isArray(iterable) || isArguments(iterable)) mode = "array";	else if (isString(iterable)) mode = "string";	else iterable = get(iterable);	callable(cb);	doBreak = function () {		broken = true;	};	if (mode === "array") {		some.call(iterable, function (value) {			call.call(cb, thisArg, value, doBreak);			return broken;		});		return;	}	if (mode === "string") {		length = iterable.length;		for (i = 0; i < length; ++i) {			char = iterable[i];			if (i + 1 < length) {				code = char.charCodeAt(0);				if (code >= 0xd800 && code <= 0xdbff) char += iterable[++i];			}			call.call(cb, thisArg, char, doBreak);			if (broken) break;		}		return;	}	result = iterable.next();	while (!result.done) {		call.call(cb, thisArg, result.value, doBreak);		if (broken) return;		result = iterable.next();	}};
 |