if (typeof global === 'undefined') { | |
var global = this; | |
} | |
function __createIterableObject(arr, methods) { | |
methods = methods || {}; | |
if (typeof Symbol !== 'function' || !Symbol.iterator) { | |
return {}; | |
} | |
arr.length++; | |
var iterator = { | |
next: function() { | |
return { value: arr.shift(), done: arr.length <= 0 }; | |
}, | |
'return': methods['return'], | |
'throw': methods['throw'] | |
}; | |
var iterable = {}; | |
iterable[Symbol.iterator] = function(){ return iterator; } | |
return iterable; | |
} | |
function test() { | |
var closed = ''; | |
var iter = __createIterableObject([1, 2, 3], { | |
'return': function(){ | |
closed += 'a'; | |
return {done: true}; | |
} | |
}); | |
var gen = (function* generator(){ | |
try { | |
yield *iter; | |
} finally { | |
closed += 'b'; | |
} | |
})(); | |
gen.next(); | |
gen['return'](); | |
return closed === 'ab'; | |
} | |
if (!test()) | |
throw new Error("Test failed"); | |