You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					32 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					32 lines
				
				1.2 KiB
			| 
											11 months ago
										 | '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); | ||
|  | }); |