From 34533e06a7b6f73bb9cf16058207e97bd91c832c Mon Sep 17 00:00:00 2001 From: janekptacijarabaci Date: Sun, 25 Mar 2018 12:38:28 +0200 Subject: Bug 1332881 - Handle stack value in correct order when leaving loop and try-finally Issue #74 --- js/src/tests/ecma_6/Statements/for-inof-finally.js | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 js/src/tests/ecma_6/Statements/for-inof-finally.js (limited to 'js/src/tests/ecma_6/Statements/for-inof-finally.js') diff --git a/js/src/tests/ecma_6/Statements/for-inof-finally.js b/js/src/tests/ecma_6/Statements/for-inof-finally.js new file mode 100644 index 000000000..187dcdaf5 --- /dev/null +++ b/js/src/tests/ecma_6/Statements/for-inof-finally.js @@ -0,0 +1,54 @@ +var BUGNUMBER = 1332881; +var summary = + "Leaving for-in and try should handle stack value in correct order"; + +print(BUGNUMBER + ": " + summary); + +var a = (function () { + for (var x in [0]) { + try {} finally { + return 11; + } + } +})(); +assertEq(a, 11); + +var b = (function () { + for (var x of [0]) { + try {} finally { + return 12; + } + } +})(); +assertEq(b, 12); + +var c = (function () { + for (var x in [0]) { + for (var y of [0]) { + try {} finally { + return 13; + } + } + } +})(); +assertEq(c, 13); + +var d = (function () { + for (var x in [0]) { + for (var y of [0]) { + try {} finally { + for (var z in [0]) { + for (var w of [0]) { + try {} finally { + return 14; + } + } + } + } + } + } +})(); +assertEq(d, 14); + +if (typeof reportCompare === "function") + reportCompare(true, true); -- cgit v1.2.3 From e641a2c53a857141042ca62f1fe0b63b55a130af Mon Sep 17 00:00:00 2001 From: janekptacijarabaci Date: Sun, 25 Mar 2018 12:56:18 +0200 Subject: Bug 1334799 - Handle stack value in correct order when leaving for-of loop from finally block Issue #74 --- js/src/tests/ecma_6/Statements/for-inof-finally.js | 32 +++++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'js/src/tests/ecma_6/Statements/for-inof-finally.js') diff --git a/js/src/tests/ecma_6/Statements/for-inof-finally.js b/js/src/tests/ecma_6/Statements/for-inof-finally.js index 187dcdaf5..e1f0c77e1 100644 --- a/js/src/tests/ecma_6/Statements/for-inof-finally.js +++ b/js/src/tests/ecma_6/Statements/for-inof-finally.js @@ -4,6 +4,24 @@ var summary = print(BUGNUMBER + ": " + summary); +var called = 0; +function reset() { + called = 0; +} +var obj = { + [Symbol.iterator]() { + return { + next() { + return { value: 10, done: false }; + }, + return() { + called++; + return {}; + } + }; + } +}; + var a = (function () { for (var x in [0]) { try {} finally { @@ -13,32 +31,37 @@ var a = (function () { })(); assertEq(a, 11); +reset(); var b = (function () { - for (var x of [0]) { + for (var x of obj) { try {} finally { return 12; } } })(); +assertEq(called, 1); assertEq(b, 12); +reset(); var c = (function () { for (var x in [0]) { - for (var y of [0]) { + for (var y of obj) { try {} finally { return 13; } } } })(); +assertEq(called, 1); assertEq(c, 13); +reset(); var d = (function () { for (var x in [0]) { - for (var y of [0]) { + for (var y of obj) { try {} finally { for (var z in [0]) { - for (var w of [0]) { + for (var w of obj) { try {} finally { return 14; } @@ -48,6 +71,7 @@ var d = (function () { } } })(); +assertEq(called, 2); assertEq(d, 14); if (typeof reportCompare === "function") -- cgit v1.2.3