mirror of https://github.com/tc39/test262.git
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: >
|
||||
Control flow during body evaluation should honor `break` statements within
|
||||
the `catch` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
i++;
|
||||
for (var x of iterator) {
|
||||
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
i++;
|
||||
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);
|
|
@ -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: >
|
||||
Control flow during body evaluation should honor `break` statements within
|
||||
`try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
i++;
|
||||
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
i++;
|
||||
break;
|
||||
$ERROR('This code is unreachable.');
|
||||
|
||||
$ERROR('This code is unreachable (following `break` statement).');
|
||||
} catch (err) {}
|
||||
|
||||
$ERROR('This code is unreachable.');
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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: >
|
||||
Control flow during body evaluation should honor labeled `break`
|
||||
statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
outer:
|
||||
while (true) {
|
||||
for (var x of iterable) {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
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);
|
|
@ -4,16 +4,17 @@
|
|||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `break` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
break;
|
||||
|
|
@ -5,24 +5,27 @@ 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 iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
i++;
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
i++;
|
||||
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);
|
|
@ -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: >
|
||||
Control flow during body evaluation should honor `continue` statements
|
||||
within `try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
i++;
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
i++;
|
||||
continue;
|
||||
$ERROR('This code is unreachable.');
|
||||
|
||||
$ERROR('This code is unreachable (following `continue` statement).');
|
||||
} catch (err) {}
|
||||
|
||||
$ERROR('This code is unreachable.');
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 2);
|
|
@ -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);
|
|
@ -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: >
|
||||
Control flow during body evaluation should honor labeled `continue`
|
||||
statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
var loop = true;
|
||||
|
||||
|
@ -18,7 +19,7 @@ outer:
|
|||
while (loop) {
|
||||
loop = false;
|
||||
|
||||
for (var x of iterable) {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
continue outer;
|
||||
|
|
@ -4,16 +4,17 @@
|
|||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `continue` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
continue;
|
||||
|
|
@ -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);
|
|
@ -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);
|
|
@ -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
|
||||
description: >
|
||||
Control flow during body evaluation should honor `return` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
var result = (function() {
|
||||
for (var x of iterable) {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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…
Reference in New Issue