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.
28 lines
741 B
28 lines
741 B
'use strict'; |
|
|
|
var $TypeError = require('es-errors/type'); |
|
var isObject = require('es-object-atoms/isObject'); |
|
|
|
var Call = require('./Call'); |
|
var GetV = require('./GetV'); |
|
var IsCallable = require('./IsCallable'); |
|
|
|
// https://262.ecma-international.org/14.0/#sec-getiteratorfrommethod |
|
|
|
module.exports = function GetIteratorFromMethod(obj, method) { |
|
if (!IsCallable(method)) { |
|
throw new $TypeError('method must be a function'); |
|
} |
|
|
|
var iterator = Call(method, obj); // step 1 |
|
if (!isObject(iterator)) { |
|
throw new $TypeError('iterator must return an object'); // step 2 |
|
} |
|
|
|
var nextMethod = GetV(iterator, 'next'); // step 3 |
|
return { // steps 4-5 |
|
'[[Iterator]]': iterator, |
|
'[[NextMethod]]': nextMethod, |
|
'[[Done]]': false |
|
}; |
|
};
|
|
|