mirror of
https://github.com/tc39/test262.git
synced 2025-04-08 19:35:28 +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
test/language/statements/for-of
Array.prototype.Symbol.iterator.jsArray.prototype.entries.jsArray.prototype.keys.jsarray.jsbreak-from-catch.jsbreak-from-finally.jsbreak-from-try.jsbreak-label-from-catch.jsbreak-label-from-finally.jsbreak-label-from-try.jsbreak-label.jsbreak.jscontinue-from-catch.jscontinue-from-finally.jscontinue-from-try.jscontinue-label-from-catch.jscontinue-label-from-finally.jscontinue-label-from-try.jscontinue-label.jscontinue.jsgenerator.jsgeneric-iterable.jshead-expr-obj-iterator-method.jshead-expr-primitive-iterator-method.jshead-expr-to-obj.jsiterator-as-proxy.jsiterator-next-reference.jsiterator-next-result-done-attr.jsiterator-next-result-type.jsiterator-next-result-value-attr.jsnested.jsreturn-from-catch.jsreturn-from-finally.jsreturn-from-try.jsreturn.jsthrow-from-catch.jsthrow-from-finally.jsthrow.jsyield-from-catch.jsyield-from-finally.jsyield-from-try.jsyield-star-from-catch.jsyield-star-from-finally.jsyield-star-from-try.jsyield-star.jsyield.js
@ -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);
|
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: >
|
||||
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);
|
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: >
|
||||
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;
|
||||
|
11
test/language/for-of/continue-from-catch.js → test/language/statements/for-of/continue-from-catch.js
11
test/language/for-of/continue-from-catch.js → test/language/statements/for-of/continue-from-catch.js
@ -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);
|
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: >
|
||||
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);
|
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: >
|
||||
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;
|
||||
|
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
|
||||
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);
|
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