Chromium Code Reviews| Index: src/collection-iterator.js |
| diff --git a/src/collection-iterator.js b/src/collection-iterator.js |
| index 2436a931e28bc4acde80f5c4a8143cc0bff5b8f3..323786b28cc2704b699541f1cfcf5e953ba12ac4 100644 |
| --- a/src/collection-iterator.js |
| +++ b/src/collection-iterator.js |
| @@ -21,7 +21,24 @@ function SetIteratorNextJS() { |
| throw MakeTypeError('incompatible_method_receiver', |
| ['Set Iterator.prototype.next', this]); |
| } |
| - return %SetIteratorNext(this); |
| + |
| + var value_array = [UNDEFINED, UNDEFINED]; |
| + var entry = {value: value_array, done: false}; |
|
arv (Not doing code reviews)
2014/06/25 20:17:54
I benchmarked this and the following code has no n
|
| + switch (%SetIteratorNext(this, value_array)) { |
| + case 0: |
| + entry.value = UNDEFINED; |
| + entry.done = true; |
| + break; |
| + case ITERATOR_KIND_VALUES: |
| + entry.value = value_array[0]; |
| + break; |
| + case ITERATOR_KIND_ENTRIES: |
| + value_array[1] = value_array[0]; |
| + entry.value = value_array; |
| + break; |
| + } |
| + |
| + return entry; |
| } |
| @@ -97,7 +114,26 @@ function MapIteratorNextJS() { |
| throw MakeTypeError('incompatible_method_receiver', |
| ['Map Iterator.prototype.next', this]); |
| } |
| - return %MapIteratorNext(this); |
| + |
| + var value_array = [UNDEFINED, UNDEFINED]; |
| + var entry = {value: value_array, done: false}; |
| + switch (%MapIteratorNext(this, value_array)) { |
| + case 0: |
| + entry.value = UNDEFINED; |
| + entry.done = true; |
| + break; |
| + case ITERATOR_KIND_KEYS: |
| + entry.value = value_array[0]; |
| + break; |
| + case ITERATOR_KIND_VALUES: |
| + entry.value = value_array[1]; |
| + break; |
| + case ITERATOR_KIND_ENTRIES: |
| + entry.value = value_array; |
| + break; |
| + } |
| + |
| + return entry; |
| } |