12345678910111213141516171819202122232425262728293031 |
- 'use strict';
- var charAt = require('../internals/string-multibyte').charAt;
- var toString = require('../internals/to-string');
- var InternalStateModule = require('../internals/internal-state');
- var defineIterator = require('../internals/iterator-define');
- var createIterResultObject = require('../internals/create-iter-result-object');
- var STRING_ITERATOR = 'String Iterator';
- var setInternalState = InternalStateModule.set;
- var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
- // `String.prototype[@@iterator]` method
- // https://tc39.es/ecma262/#sec-string.prototype-@@iterator
- defineIterator(String, 'String', function (iterated) {
- setInternalState(this, {
- type: STRING_ITERATOR,
- string: toString(iterated),
- index: 0
- });
- // `%StringIteratorPrototype%.next` method
- // https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
- }, function next() {
- var state = getInternalState(this);
- var string = state.string;
- var index = state.index;
- var point;
- if (index >= string.length) return createIterResultObject(undefined, true);
- point = charAt(string, index);
- state.index += point.length;
- return createIterResultObject(point, false);
- });
|