Spaces:
Runtime error
Runtime error
// Thanks @mathiasbynens | |
// http://mathiasbynens.be/notes/javascript-unicode#iterating-over-symbols | |
; | |
var setPrototypeOf = require("es5-ext/object/set-prototype-of") | |
, d = require("d") | |
, Symbol = require("es6-symbol") | |
, Iterator = require("./"); | |
var defineProperty = Object.defineProperty, StringIterator; | |
StringIterator = module.exports = function (str) { | |
if (!(this instanceof StringIterator)) throw new TypeError("Constructor requires 'new'"); | |
str = String(str); | |
Iterator.call(this, str); | |
defineProperty(this, "__length__", d("", str.length)); | |
}; | |
if (setPrototypeOf) setPrototypeOf(StringIterator, Iterator); | |
// Internal %ArrayIteratorPrototype% doesn't expose its constructor | |
delete StringIterator.prototype.constructor; | |
StringIterator.prototype = Object.create(Iterator.prototype, { | |
_next: d(function () { | |
if (!this.__list__) return undefined; | |
if (this.__nextIndex__ < this.__length__) return this.__nextIndex__++; | |
this._unBind(); | |
return undefined; | |
}), | |
_resolve: d(function (i) { | |
var char = this.__list__[i], code; | |
if (this.__nextIndex__ === this.__length__) return char; | |
code = char.charCodeAt(0); | |
if (code >= 0xd800 && code <= 0xdbff) return char + this.__list__[this.__nextIndex__++]; | |
return char; | |
}) | |
}); | |
defineProperty(StringIterator.prototype, Symbol.toStringTag, d("c", "String Iterator")); | |