mirror of
https://github.com/Doodle3D/Doodle3D-API
synced 2024-12-23 22:13:48 +01:00
47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
|
/* */
|
||
|
'use strict';
|
||
|
var $ = require("./$"),
|
||
|
cof = require("./$.cof"),
|
||
|
classof = cof.classof,
|
||
|
assert = require("./$.assert"),
|
||
|
assertObject = assert.obj,
|
||
|
SYMBOL_ITERATOR = require("./$.wks")('iterator'),
|
||
|
FF_ITERATOR = '@@iterator',
|
||
|
Iterators = require("./$.shared")('iterators'),
|
||
|
IteratorPrototype = {};
|
||
|
setIterator(IteratorPrototype, $.that);
|
||
|
function setIterator(O, value) {
|
||
|
$.hide(O, SYMBOL_ITERATOR, value);
|
||
|
if (FF_ITERATOR in [])
|
||
|
$.hide(O, FF_ITERATOR, value);
|
||
|
}
|
||
|
module.exports = {
|
||
|
BUGGY: 'keys' in [] && !('next' in [].keys()),
|
||
|
Iterators: Iterators,
|
||
|
step: function(done, value) {
|
||
|
return {
|
||
|
value: value,
|
||
|
done: !!done
|
||
|
};
|
||
|
},
|
||
|
is: function(it) {
|
||
|
var O = Object(it),
|
||
|
Symbol = $.g.Symbol;
|
||
|
return (Symbol && Symbol.iterator || FF_ITERATOR) in O || SYMBOL_ITERATOR in O || $.has(Iterators, classof(O));
|
||
|
},
|
||
|
get: function(it) {
|
||
|
var Symbol = $.g.Symbol,
|
||
|
getIter;
|
||
|
if (it != undefined) {
|
||
|
getIter = it[Symbol && Symbol.iterator || FF_ITERATOR] || it[SYMBOL_ITERATOR] || Iterators[classof(it)];
|
||
|
}
|
||
|
assert($.isFunction(getIter), it, ' is not iterable!');
|
||
|
return assertObject(getIter.call(it));
|
||
|
},
|
||
|
set: setIterator,
|
||
|
create: function(Constructor, NAME, next, proto) {
|
||
|
Constructor.prototype = $.create(proto || IteratorPrototype, {next: $.desc(1, next)});
|
||
|
cof.set(Constructor, NAME + ' Iterator');
|
||
|
}
|
||
|
};
|