mirror of
https://github.com/tc39/test262.git
synced 2025-07-23 14:04:51 +02:00
Merge pull request #220 from bocoup/for-of-more-control-flow
Additional control flow tests for `for..of` statements
This commit is contained in:
commit
e9593a3d65
@ -5,25 +5,27 @@ es6id: 13.6.4.13 S5.n
|
|||||||
description: >
|
description: >
|
||||||
Control flow during body evaluation should honor `break` statements within
|
Control flow during body evaluation should honor `break` statements within
|
||||||
the `catch` block of `try` statements.
|
the `catch` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
function* values() {
|
function* values() {
|
||||||
yield 1;
|
yield 1;
|
||||||
yield 1;
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
}
|
}
|
||||||
var iterable = values();
|
var iterator = values();
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
for (var x of iterable) {
|
for (var x of iterator) {
|
||||||
i++;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
throw new Error();
|
throw new Error();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
i++;
|
||||||
break;
|
break;
|
||||||
|
$ERROR('This code is unreachable (following `break` statement).');
|
||||||
}
|
}
|
||||||
|
|
||||||
$ERROR('This code is unreachable.');
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.sameValue(i, 1);
|
assert.sameValue(i, 1);
|
30
test/language/statements/for-of/break-from-finally.js
Normal file
30
test/language/statements/for-of/break-from-finally.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13 S5.n
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `break` statements within
|
||||||
|
`finally` blocks.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
} finally {
|
||||||
|
i++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `break` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.sameValue(i, 1);
|
@ -5,24 +5,25 @@ es6id: 13.6.4.13 S5.n
|
|||||||
description: >
|
description: >
|
||||||
Control flow during body evaluation should honor `break` statements within
|
Control flow during body evaluation should honor `break` statements within
|
||||||
`try` blocks.
|
`try` blocks.
|
||||||
|
features: [generators]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
function* values() {
|
function* values() {
|
||||||
yield 1;
|
yield 1;
|
||||||
yield 1;
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
}
|
}
|
||||||
var iterable = values();
|
var iterator = values();
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
for (var x of iterable) {
|
for (var x of iterator) {
|
||||||
i++;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
i++;
|
||||||
break;
|
break;
|
||||||
$ERROR('This code is unreachable.');
|
|
||||||
|
$ERROR('This code is unreachable (following `break` statement).');
|
||||||
} catch (err) {}
|
} catch (err) {}
|
||||||
|
|
||||||
$ERROR('This code is unreachable.');
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.sameValue(i, 1);
|
assert.sameValue(i, 1);
|
35
test/language/statements/for-of/break-label-from-catch.js
Normal file
35
test/language/statements/for-of/break-label-from-catch.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13 S5.n
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `break` statements within
|
||||||
|
`try` blocks.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
outer:
|
||||||
|
while (true) {
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
throw new Error();
|
||||||
|
} catch (err) {
|
||||||
|
i++;
|
||||||
|
break outer;
|
||||||
|
$ERROR('This code is unreachable (following `break` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.sameValue(i, 1);
|
34
test/language/statements/for-of/break-label-from-finally.js
Normal file
34
test/language/statements/for-of/break-label-from-finally.js
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13 S5.n
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `break` statements within
|
||||||
|
`try` blocks.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
outer:
|
||||||
|
while (true) {
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
} finally {
|
||||||
|
i++;
|
||||||
|
break outer;
|
||||||
|
$ERROR('This code is unreachable (following `break` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.sameValue(i, 1);
|
33
test/language/statements/for-of/break-label-from-try.js
Normal file
33
test/language/statements/for-of/break-label-from-try.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13 S5.n
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `break` statements within
|
||||||
|
`try` blocks.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
outer:
|
||||||
|
while (true) {
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
i++;
|
||||||
|
break outer;
|
||||||
|
$ERROR('This code is unreachable (following `break` statement).');
|
||||||
|
} catch (err) {}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.sameValue(i, 1);
|
@ -5,24 +5,25 @@ es6id: 13.6.4.13 S5.n
|
|||||||
description: >
|
description: >
|
||||||
Control flow during body evaluation should honor labeled `break`
|
Control flow during body evaluation should honor labeled `break`
|
||||||
statements.
|
statements.
|
||||||
|
features: [generators]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
function* values() {
|
function* values() {
|
||||||
yield 1;
|
yield 1;
|
||||||
yield 1;
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
}
|
}
|
||||||
var iterable = values();
|
var iterator = values();
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
outer:
|
outer:
|
||||||
while (true) {
|
while (true) {
|
||||||
for (var x of iterable) {
|
for (var x of iterator) {
|
||||||
i++;
|
i++;
|
||||||
break outer;
|
break outer;
|
||||||
|
|
||||||
$ERROR('This code is unreachable.');
|
$ERROR('This code is unreachable (following `break` statement).');
|
||||||
}
|
}
|
||||||
$ERROR('This code is unreachable.');
|
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.sameValue(i, 1);
|
assert.sameValue(i, 1);
|
@ -4,16 +4,17 @@
|
|||||||
es6id: 13.6.4.13 S5.n
|
es6id: 13.6.4.13 S5.n
|
||||||
description: >
|
description: >
|
||||||
Control flow during body evaluation should honor `break` statements.
|
Control flow during body evaluation should honor `break` statements.
|
||||||
|
features: [generators]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
function* values() {
|
function* values() {
|
||||||
yield 1;
|
yield 1;
|
||||||
yield 1;
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
}
|
}
|
||||||
var iterable = values();
|
var iterator = values();
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
for (var x of iterable) {
|
for (var x of iterator) {
|
||||||
i++;
|
i++;
|
||||||
break;
|
break;
|
||||||
|
|
@ -5,24 +5,27 @@ es6id: 13.6.4.13 S5.n
|
|||||||
description: >
|
description: >
|
||||||
Control flow during body evaluation should honor `continue` statements
|
Control flow during body evaluation should honor `continue` statements
|
||||||
within the `catch` block of `try` statements.
|
within the `catch` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
function* values() {
|
function* values() {
|
||||||
yield 1;
|
yield 1;
|
||||||
yield 1;
|
yield 1;
|
||||||
}
|
}
|
||||||
var iterable = values();
|
var iterator = values();
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
for (var x of iterable) {
|
for (var x of iterator) {
|
||||||
i++;
|
|
||||||
try {
|
try {
|
||||||
throw new Error();
|
throw new Error();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `continue` statement).');
|
||||||
}
|
}
|
||||||
|
|
||||||
$ERROR('This code is unreachable.');
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.sameValue(i, 2);
|
assert.sameValue(i, 2);
|
32
test/language/statements/for-of/continue-from-finally.js
Normal file
32
test/language/statements/for-of/continue-from-finally.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13 S5.n
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `continue` statements
|
||||||
|
within the `finally` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
throw new Error();
|
||||||
|
} catch (err) {
|
||||||
|
} finally {
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `continue` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.sameValue(i, 2);
|
@ -5,23 +5,25 @@ es6id: 13.6.4.13 S5.n
|
|||||||
description: >
|
description: >
|
||||||
Control flow during body evaluation should honor `continue` statements
|
Control flow during body evaluation should honor `continue` statements
|
||||||
within `try` blocks.
|
within `try` blocks.
|
||||||
|
features: [generators]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
function* values() {
|
function* values() {
|
||||||
yield 1;
|
yield 1;
|
||||||
yield 1;
|
yield 1;
|
||||||
}
|
}
|
||||||
var iterable = values();
|
var iterator = values();
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
for (var x of iterable) {
|
for (var x of iterator) {
|
||||||
i++;
|
|
||||||
try {
|
try {
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
$ERROR('This code is unreachable.');
|
|
||||||
|
$ERROR('This code is unreachable (following `continue` statement).');
|
||||||
} catch (err) {}
|
} catch (err) {}
|
||||||
|
|
||||||
$ERROR('This code is unreachable.');
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.sameValue(i, 2);
|
assert.sameValue(i, 2);
|
38
test/language/statements/for-of/continue-label-from-catch.js
Normal file
38
test/language/statements/for-of/continue-label-from-catch.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13 S5.n
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `continue` statements
|
||||||
|
within the `catch` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var loop = true;
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
outer:
|
||||||
|
while (loop) {
|
||||||
|
loop = false;
|
||||||
|
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
throw new Error();
|
||||||
|
} catch (err) {
|
||||||
|
i++;
|
||||||
|
continue outer;
|
||||||
|
$ERROR('This code is unreachable (following `continue` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.sameValue(i, 1);
|
@ -0,0 +1,40 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13 S5.n
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `continue` statements
|
||||||
|
within the `finally` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var loop = true;
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
outer:
|
||||||
|
while (loop) {
|
||||||
|
loop = false;
|
||||||
|
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
throw new Error();
|
||||||
|
} catch (err) {
|
||||||
|
} finally {
|
||||||
|
i++;
|
||||||
|
continue outer;
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `continue` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.sameValue(i, 1);
|
35
test/language/statements/for-of/continue-label-from-try.js
Normal file
35
test/language/statements/for-of/continue-label-from-try.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13 S5.n
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `continue` statements
|
||||||
|
within `try` blocks.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var loop = true;
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
outer:
|
||||||
|
while (loop) {
|
||||||
|
loop = false;
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
i++;
|
||||||
|
continue outer;
|
||||||
|
$ERROR('This code is unreachable (following `continue` statement).');
|
||||||
|
} catch (err) {}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statment).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.sameValue(i, 1);
|
@ -5,12 +5,13 @@ es6id: 13.6.4.13 S5.n
|
|||||||
description: >
|
description: >
|
||||||
Control flow during body evaluation should honor labeled `continue`
|
Control flow during body evaluation should honor labeled `continue`
|
||||||
statements.
|
statements.
|
||||||
|
features: [generators]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
function* values() {
|
function* values() {
|
||||||
yield 1;
|
yield 1;
|
||||||
}
|
}
|
||||||
var iterable = values();
|
var iterator = values();
|
||||||
var i = 0;
|
var i = 0;
|
||||||
var loop = true;
|
var loop = true;
|
||||||
|
|
||||||
@ -18,7 +19,7 @@ outer:
|
|||||||
while (loop) {
|
while (loop) {
|
||||||
loop = false;
|
loop = false;
|
||||||
|
|
||||||
for (var x of iterable) {
|
for (var x of iterator) {
|
||||||
i++;
|
i++;
|
||||||
continue outer;
|
continue outer;
|
||||||
|
|
@ -4,16 +4,17 @@
|
|||||||
es6id: 13.6.4.13 S5.n
|
es6id: 13.6.4.13 S5.n
|
||||||
description: >
|
description: >
|
||||||
Control flow during body evaluation should honor `continue` statements.
|
Control flow during body evaluation should honor `continue` statements.
|
||||||
|
features: [generators]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
function* values() {
|
function* values() {
|
||||||
yield 1;
|
yield 1;
|
||||||
yield 1;
|
yield 1;
|
||||||
}
|
}
|
||||||
var iterable = values();
|
var iterator = values();
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
for (var x of iterable) {
|
for (var x of iterator) {
|
||||||
i++;
|
i++;
|
||||||
continue;
|
continue;
|
||||||
|
|
36
test/language/statements/for-of/return-from-catch.js
Normal file
36
test/language/statements/for-of/return-from-catch.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `return` statements within
|
||||||
|
the `catch` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
var result = (function() {
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
throw new Error();
|
||||||
|
} catch(err) {
|
||||||
|
i++;
|
||||||
|
return 34;
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `return` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||||
|
})();
|
||||||
|
|
||||||
|
assert.sameValue(result, 34);
|
||||||
|
assert.sameValue(i, 1);
|
35
test/language/statements/for-of/return-from-finally.js
Normal file
35
test/language/statements/for-of/return-from-finally.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `return` statements within
|
||||||
|
the `finally` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
var result = (function() {
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
} finally {
|
||||||
|
i++;
|
||||||
|
return 34;
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `return` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||||
|
})();
|
||||||
|
|
||||||
|
assert.sameValue(result, 34);
|
||||||
|
assert.sameValue(i, 1);
|
36
test/language/statements/for-of/return-from-try.js
Normal file
36
test/language/statements/for-of/return-from-try.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `return` statements within
|
||||||
|
`try` blocks.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
|
}
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
|
||||||
|
var result = (function() {
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
i++;
|
||||||
|
return 34;
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `return` statement).');
|
||||||
|
} catch(err) {
|
||||||
|
$ERROR('This code is unreachable (within `catch` block).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||||
|
})();
|
||||||
|
|
||||||
|
assert.sameValue(result, 34);
|
||||||
|
assert.sameValue(i, 1);
|
@ -4,24 +4,25 @@
|
|||||||
es6id: 13.6.4.13
|
es6id: 13.6.4.13
|
||||||
description: >
|
description: >
|
||||||
Control flow during body evaluation should honor `return` statements.
|
Control flow during body evaluation should honor `return` statements.
|
||||||
|
features: [generators]
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
function* values() {
|
function* values() {
|
||||||
yield 1;
|
yield 1;
|
||||||
yield 1;
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
}
|
}
|
||||||
var iterable = values();
|
var iterator = values();
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
var result = (function() {
|
var result = (function() {
|
||||||
for (var x of iterable) {
|
for (var x of iterator) {
|
||||||
i++;
|
i++;
|
||||||
return 34;
|
return 34;
|
||||||
|
|
||||||
$ERROR('This code is unreachable.');
|
$ERROR('This code is unreachable (following `return` statement).');
|
||||||
}
|
}
|
||||||
|
|
||||||
$ERROR('This code is unreachable.');
|
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||||
})();
|
})();
|
||||||
|
|
||||||
assert.sameValue(result, 34);
|
assert.sameValue(result, 34);
|
37
test/language/statements/for-of/throw-from-catch.js
Normal file
37
test/language/statements/for-of/throw-from-catch.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `throw` statements within
|
||||||
|
the `catch` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
|
}
|
||||||
|
var CustomError = function() {};
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
var error = new CustomError();
|
||||||
|
|
||||||
|
assert.throws(CustomError, function() {
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
throw new Error();
|
||||||
|
} catch (err) {
|
||||||
|
i++;
|
||||||
|
throw error;
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `throw` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.sameValue(i, 1);
|
36
test/language/statements/for-of/throw-from-finally.js
Normal file
36
test/language/statements/for-of/throw-from-finally.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `throw` statements within
|
||||||
|
the `finally` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
|
}
|
||||||
|
var CustomError = function() {};
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
var error = new CustomError();
|
||||||
|
|
||||||
|
assert.throws(CustomError, function() {
|
||||||
|
for (var x of iterator) {
|
||||||
|
try {
|
||||||
|
} finally {
|
||||||
|
i++;
|
||||||
|
throw error;
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `throw` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `try` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.sameValue(i, 1);
|
30
test/language/statements/for-of/throw.js
Normal file
30
test/language/statements/for-of/throw.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `throw` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
$ERROR('This code is unreachable (following `yield` statement).');
|
||||||
|
}
|
||||||
|
var CustomError = function() {};
|
||||||
|
var iterator = values();
|
||||||
|
var i = 0;
|
||||||
|
var error = new CustomError();
|
||||||
|
|
||||||
|
assert.throws(CustomError, function() {
|
||||||
|
for (var x of iterator) {
|
||||||
|
i++;
|
||||||
|
throw error;
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `throw` statement).');
|
||||||
|
}
|
||||||
|
|
||||||
|
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.sameValue(i, 1);
|
52
test/language/statements/for-of/yield-from-catch.js
Normal file
52
test/language/statements/for-of/yield-from-catch.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `yield` statements within
|
||||||
|
the `catch` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var dataIterator = values();
|
||||||
|
var controlIterator = (function*() {
|
||||||
|
for (var x of dataIterator) {
|
||||||
|
try {
|
||||||
|
throw new Error();
|
||||||
|
$ERROR('This code is unreachable.');
|
||||||
|
} catch (err) {
|
||||||
|
i++;
|
||||||
|
yield;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
l++;
|
||||||
|
})();
|
||||||
|
var i = 0;
|
||||||
|
var j = 0;
|
||||||
|
var k = 0;
|
||||||
|
var l = 0;
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Second iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Second iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Second iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 2, 'Third iteration: post-yield');
|
||||||
|
assert.sameValue(k, 2, 'Third iteration: post-try');
|
||||||
|
assert.sameValue(l, 1, 'Third iteration: post-for-of');
|
50
test/language/statements/for-of/yield-from-finally.js
Normal file
50
test/language/statements/for-of/yield-from-finally.js
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `yield` statements within
|
||||||
|
the `finally` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var dataIterator = values();
|
||||||
|
var controlIterator = (function*() {
|
||||||
|
for (var x of dataIterator) {
|
||||||
|
try {
|
||||||
|
} finally {
|
||||||
|
i++;
|
||||||
|
yield;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
l++;
|
||||||
|
})();
|
||||||
|
var i = 0;
|
||||||
|
var j = 0;
|
||||||
|
var k = 0;
|
||||||
|
var l = 0;
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Second iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Second iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Second iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 2, 'Third iteration: post-yield');
|
||||||
|
assert.sameValue(k, 2, 'Third iteration: post-try');
|
||||||
|
assert.sameValue(l, 1, 'Third iteration: post-for-of');
|
49
test/language/statements/for-of/yield-from-try.js
Normal file
49
test/language/statements/for-of/yield-from-try.js
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `yield` statements within
|
||||||
|
`try` blocks.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var dataIterator = values();
|
||||||
|
var controlIterator = (function*() {
|
||||||
|
for (var x of dataIterator) {
|
||||||
|
try {
|
||||||
|
i++;
|
||||||
|
yield;
|
||||||
|
j++;
|
||||||
|
} catch (err) {}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
l++;
|
||||||
|
})();
|
||||||
|
var i = 0;
|
||||||
|
var j = 0;
|
||||||
|
var k = 0;
|
||||||
|
var l = 0;
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Second iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Second iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Second iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 2, 'Third iteration: post-yield');
|
||||||
|
assert.sameValue(k, 2, 'Third iteration: post-try');
|
||||||
|
assert.sameValue(l, 1, 'Third iteration: post-for-of');
|
64
test/language/statements/for-of/yield-star-from-catch.js
Normal file
64
test/language/statements/for-of/yield-star-from-catch.js
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `yield *` statements
|
||||||
|
within the `catch` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var dataIterator = values();
|
||||||
|
var controlIterator = (function*() {
|
||||||
|
for (var x of dataIterator) {
|
||||||
|
try {
|
||||||
|
throw new Error();
|
||||||
|
$ERROR('This code is unreachable.');
|
||||||
|
} catch (err) {
|
||||||
|
i++;
|
||||||
|
yield * values();
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
l++;
|
||||||
|
})();
|
||||||
|
var i = 0;
|
||||||
|
var j = 0;
|
||||||
|
var k = 0;
|
||||||
|
var l = 0;
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'Second iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'Second iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'Second iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Third iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Third iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Third iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Fourth iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Fourth iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Fourth iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Fourth iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Fifth iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 2, 'Fifth iteration: post-yield');
|
||||||
|
assert.sameValue(k, 2, 'Fifth iteration: post-try');
|
||||||
|
assert.sameValue(l, 1, 'Fifth iteration: post-for-of');
|
62
test/language/statements/for-of/yield-star-from-finally.js
Normal file
62
test/language/statements/for-of/yield-star-from-finally.js
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `yield *` statements
|
||||||
|
within the `finally` block of `try` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var dataIterator = values();
|
||||||
|
var controlIterator = (function*() {
|
||||||
|
for (var x of dataIterator) {
|
||||||
|
try {
|
||||||
|
} finally {
|
||||||
|
i++;
|
||||||
|
yield * values();
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
l++;
|
||||||
|
})();
|
||||||
|
var i = 0;
|
||||||
|
var j = 0;
|
||||||
|
var k = 0;
|
||||||
|
var l = 0;
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'Second iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'Second iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'Second iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Third iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Third iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Third iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Fourth iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Fourth iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Fourth iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Fourth iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Fifth iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 2, 'Fifth iteration: post-yield');
|
||||||
|
assert.sameValue(k, 2, 'Fifth iteration: post-try');
|
||||||
|
assert.sameValue(l, 1, 'Fifth iteration: post-for-of');
|
61
test/language/statements/for-of/yield-star-from-try.js
Normal file
61
test/language/statements/for-of/yield-star-from-try.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `yield *` statements
|
||||||
|
within `try` blocks.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var dataIterator = values();
|
||||||
|
var controlIterator = (function*() {
|
||||||
|
for (var x of dataIterator) {
|
||||||
|
try {
|
||||||
|
i++;
|
||||||
|
yield * values();
|
||||||
|
j++;
|
||||||
|
} catch (err) {}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
l++;
|
||||||
|
})();
|
||||||
|
var i = 0;
|
||||||
|
var j = 0;
|
||||||
|
var k = 0;
|
||||||
|
var l = 0;
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'Second iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'Second iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'Second iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Third iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Third iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Third iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Fourth iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Fourth iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Fourth iteration: post-try');
|
||||||
|
assert.sameValue(l, 0, 'Fourth iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Fifth iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 2, 'Fifth iteration: post-yield');
|
||||||
|
assert.sameValue(k, 2, 'Fifth iteration: post-try');
|
||||||
|
assert.sameValue(l, 1, 'Fifth iteration: post-for-of');
|
51
test/language/statements/for-of/yield-star.js
Normal file
51
test/language/statements/for-of/yield-star.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `yield *` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var dataIterator = values();
|
||||||
|
var controlIterator = (function*() {
|
||||||
|
for (var x of dataIterator) {
|
||||||
|
i++;
|
||||||
|
yield * values();
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
k++;
|
||||||
|
})();
|
||||||
|
var i = 0;
|
||||||
|
var j = 0;
|
||||||
|
var k = 0;
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'First iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'Second iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'Second iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'Second iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Third iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'Third iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Fourth iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Fourth iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'Fourth iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Fifth iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 2, 'Fifth iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Fifth iteration: post-for-of');
|
41
test/language/statements/for-of/yield.js
Normal file
41
test/language/statements/for-of/yield.js
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 13.6.4.13
|
||||||
|
description: >
|
||||||
|
Control flow during body evaluation should honor `yield` statements.
|
||||||
|
features: [generators]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
function* values() {
|
||||||
|
yield 1;
|
||||||
|
yield 1;
|
||||||
|
}
|
||||||
|
var dataIterator = values();
|
||||||
|
var controlIterator = (function*() {
|
||||||
|
for (var x of dataIterator) {
|
||||||
|
i++;
|
||||||
|
yield;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
k++;
|
||||||
|
})();
|
||||||
|
var i = 0;
|
||||||
|
var j = 0;
|
||||||
|
var k = 0;
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'First iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Second iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 1, 'Second iteration: post-yield');
|
||||||
|
assert.sameValue(k, 0, 'Second iteration: post-for-of');
|
||||||
|
|
||||||
|
controlIterator.next();
|
||||||
|
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||||
|
assert.sameValue(j, 2, 'Third iteration: post-yield');
|
||||||
|
assert.sameValue(k, 1, 'Third iteration: post-for-of');
|
Loading…
x
Reference in New Issue
Block a user