Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(526)

Unified Diff: test/mjsunit/harmony/iteration-semantics.js

Issue 332663004: For-of calls [Symbol.iterator]() on RHS to get iterator (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/x87/full-codegen-x87.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/harmony/iteration-semantics.js
diff --git a/test/mjsunit/harmony/iteration-semantics.js b/test/mjsunit/harmony/iteration-semantics.js
index 2449115dd42ce2fa79e88c99e9a449ebdcd828bb..27033e18bfd6003e21cfab80effa43773e19b55b 100644
--- a/test/mjsunit/harmony/iteration-semantics.js
+++ b/test/mjsunit/harmony/iteration-semantics.js
@@ -27,6 +27,7 @@
// Flags: --harmony-iteration
// Flags: --harmony-generators --harmony-scoping --harmony-proxies
+// Flags: --harmony-symbols
// Test for-of semantics.
@@ -41,13 +42,19 @@ function* values() {
}
}
+function wrap_iterator(iterator) {
+ var iterable = {};
+ iterable[Symbol.iterator] = function() { return iterator; };
+ return iterable;
+}
+
function integers_until(max) {
function next() {
var ret = { value: this.n, done: this.n == max };
this.n++;
return ret;
}
- return { next: next, n: 0 }
+ return wrap_iterator({ next: next, n: 0 });
}
function results(results) {
@@ -55,7 +62,7 @@ function results(results) {
function next() {
return results[i++];
}
- return { next: next }
+ return wrap_iterator({ next: next });
}
function* integers_from(n) {
@@ -72,44 +79,44 @@ function sum(x, tail) {
return x + tail;
}
-function fold(cons, seed, iter) {
- for (var x of iter) {
+function fold(cons, seed, iterable) {
+ for (var x of iterable) {
seed = cons(x, seed);
}
return seed;
}
-function* take(iter, n) {
+function* take(iterable, n) {
if (n == 0) return;
- for (let x of iter) {
+ for (let x of iterable) {
yield x;
if (--n == 0) break;
}
}
-function nth(iter, n) {
- for (let x of iter) {
+function nth(iterable, n) {
+ for (let x of iterable) {
if (n-- == 0) return x;
}
throw "unreachable";
}
-function* skip_every(iter, n) {
+function* skip_every(iterable, n) {
var i = 0;
- for (let x of iter) {
+ for (let x of iterable) {
if (++i % n == 0) continue;
yield x;
}
}
-function* iter_map(iter, f) {
- for (var x of iter) {
+function* iter_map(iterable, f) {
+ for (var x of iterable) {
yield f(x);
}
}
-function nested_fold(cons, seed, iter) {
+function nested_fold(cons, seed, iterable) {
var visited = []
- for (let x of iter) {
+ for (let x of iterable) {
for (let y of x) {
seed = cons(y, seed);
}
@@ -117,8 +124,8 @@ function nested_fold(cons, seed, iter) {
return seed;
}
-function* unreachable(iter) {
- for (let x of iter) {
+function* unreachable(iterable) {
+ for (let x of iterable) {
throw "not reached";
}
}
@@ -141,17 +148,19 @@ function never_getter(o, prop) {
return o;
}
-function remove_next_after(iter, n) {
+function remove_next_after(iterable, n) {
+ var iterator = iterable[Symbol.iterator]();
function next() {
if (n-- == 0) delete this.next;
- return iter.next();
+ return iterator.next();
}
- return { next: next }
+ return wrap_iterator({ next: next });
}
-function poison_next_after(iter, n) {
+function poison_next_after(iterable, n) {
+ var iterator = iterable[Symbol.iterator]();
function next() {
- return iter.next();
+ return iterator.next();
}
function next_getter() {
if (n-- < 0)
@@ -160,7 +169,7 @@ function poison_next_after(iter, n) {
}
var o = {};
Object.defineProperty(o, 'next', { get: next_getter });
- return o;
+ return wrap_iterator(o);
}
// Now, the tests.
@@ -223,33 +232,33 @@ assertEquals(45,
assertEquals(45,
fold(sum, 0, poison_next_after(integers_until(10), 10)));
-function labelled_continue(iter) {
+function labelled_continue(iterable) {
var n = 0;
outer:
while (true) {
n++;
- for (var x of iter) continue outer;
+ for (var x of iterable) continue outer;
break;
}
return n;
}
assertEquals(11, labelled_continue(integers_until(10)));
-function labelled_break(iter) {
+function labelled_break(iterable) {
var n = 0;
outer:
while (true) {
n++;
- for (var x of iter) break outer;
+ for (var x of iterable) break outer;
}
return n;
}
assertEquals(1, labelled_break(integers_until(10)));
// Test continue/break in catch.
-function catch_control(iter, k) {
+function catch_control(iterable, k) {
var n = 0;
- for (var x of iter) {
+ for (var x of iterable) {
try {
return k(x);
} catch (e) {
@@ -274,9 +283,9 @@ assertEquals(5,
}));
// Test continue/break in try.
-function try_control(iter, k) {
+function try_control(iterable, k) {
var n = 0;
- for (var x of iter) {
+ for (var x of iterable) {
try {
var e = k(x);
if (e == "continue") continue;
@@ -313,16 +322,17 @@ assertEquals([1, 2],
.map(transparent_proxy))));
// Proxy iterators.
-function poison_proxy_after(x, n) {
- return Proxy.create({
+function poison_proxy_after(iterable, n) {
+ var iterator = iterable[Symbol.iterator]();
+ return wrap_iterator(Proxy.create({
get: function(receiver, name) {
if (name == 'next' && n-- < 0) throw "unreachable";
- return x[name];
+ return iterator[name];
},
// Needed for integers_until(10)'s this.n++.
set: function(receiver, name, val) {
- return x[name] = val;
+ return iterator[name] = val;
}
- });
+ }));
}
assertEquals(45, fold(sum, 0, poison_proxy_after(integers_until(10), 10)));
« no previous file with comments | « src/x87/full-codegen-x87.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698