|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 'use strict'; |
|
5 |
|
6 module.metadata = { |
|
7 "stability": "experimental" |
|
8 }; |
|
9 |
|
10 // This is known as @@iterator in the ES6 spec. Until it is bound to |
|
11 // some well-known name, find the @@iterator object by expecting it as |
|
12 // the first property accessed on a for-of iterable. |
|
13 const iteratorSymbol = (function() { |
|
14 try { |
|
15 for (var _ of Proxy.create({get: function(_, name) { throw name; } })) |
|
16 break; |
|
17 } catch (name) { |
|
18 return name; |
|
19 } |
|
20 throw new TypeError; |
|
21 })(); |
|
22 |
|
23 exports.iteratorSymbol = iteratorSymbol; |
|
24 |
|
25 // An adaptor that, given an object that is iterable with for-of, is |
|
26 // suitable for being bound to __iterator__ in order to make the object |
|
27 // iterable in the same way via for-in. |
|
28 function forInIterator() { |
|
29 for (let item of this) |
|
30 yield item; |
|
31 } |
|
32 |
|
33 exports.forInIterator = forInIterator; |