2 var charAt = require('../internals/string-multibyte').charAt;
3 var InternalStateModule = require('../internals/internal-state');
4 var defineIterator = require('../internals/define-iterator');
6 var STRING_ITERATOR = 'String Iterator';
7 var setInternalState = InternalStateModule.set;
8 var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
10 // `String.prototype[@@iterator]` method
11 // https://tc39.es/ecma262/#sec-string.prototype-@@iterator
12 defineIterator(String, 'String', function (iterated) {
13 setInternalState(this, {
14 type: STRING_ITERATOR,
15 string: String(iterated),
18 // `%StringIteratorPrototype%.next` method
19 // https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
21 var state = getInternalState(this);
22 var string = state.string;
23 var index = state.index;
25 if (index >= string.length) return { value: undefined, done: true };
26 point = charAt(string, index);
27 state.index += point.length;
28 return { value: point, done: false };