summaryrefslogtreecommitdiffstats
path: root/js/src/tests/js1_7/regress
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/js1_7/regress')
-rw-r--r--js/src/tests/js1_7/regress/browser.js0
-rw-r--r--js/src/tests/js1_7/regress/regress-350387.js38
-rw-r--r--js/src/tests/js1_7/regress/regress-352640-01.js33
-rw-r--r--js/src/tests/js1_7/regress/regress-352640-02.js33
-rw-r--r--js/src/tests/js1_7/regress/regress-352640-03.js33
-rw-r--r--js/src/tests/js1_7/regress/regress-352640-04.js33
-rw-r--r--js/src/tests/js1_7/regress/regress-353079.js29
-rw-r--r--js/src/tests/js1_7/regress/regress-355023.js31
-rw-r--r--js/src/tests/js1_7/regress/regress-355832-01.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-355832-02.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-363040-01.js95
-rw-r--r--js/src/tests/js1_7/regress/regress-363040-02.js67
-rw-r--r--js/src/tests/js1_7/regress/regress-369666-01.js59
-rw-r--r--js/src/tests/js1_7/regress/regress-369666-02.js63
-rw-r--r--js/src/tests/js1_7/regress/regress-372331.js55
-rw-r--r--js/src/tests/js1_7/regress/regress-373827-01.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-373827-02.js34
-rw-r--r--js/src/tests/js1_7/regress/regress-375695.js27
-rw-r--r--js/src/tests/js1_7/regress/regress-379442.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-379483.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-385133-01.js37
-rw-r--r--js/src/tests/js1_7/regress/regress-385133-02.js35
-rw-r--r--js/src/tests/js1_7/regress/regress-385393-05.js44
-rw-r--r--js/src/tests/js1_7/regress/regress-407727-01.js17
-rw-r--r--js/src/tests/js1_7/regress/regress-407727-02.js19
-rw-r--r--js/src/tests/js1_7/regress/regress-407957.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-410649.js42
-rw-r--r--js/src/tests/js1_7/regress/regress-414553.js25
-rw-r--r--js/src/tests/js1_7/regress/regress-416601.js37
-rw-r--r--js/src/tests/js1_7/regress/regress-418641.js80
-rw-r--r--js/src/tests/js1_7/regress/regress-419803.js31
-rw-r--r--js/src/tests/js1_7/regress/regress-452703.js19
-rw-r--r--js/src/tests/js1_7/regress/regress-452960.js31
-rw-r--r--js/src/tests/js1_7/regress/regress-453049.js29
-rw-r--r--js/src/tests/js1_7/regress/regress-453051.js29
-rw-r--r--js/src/tests/js1_7/regress/regress-453411.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-462071.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-462282.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-462388.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-462407.js19
-rw-r--r--js/src/tests/js1_7/regress/regress-464403.js32
-rw-r--r--js/src/tests/js1_7/regress/regress-465236.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-465424.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-465484.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-465686.js35
-rw-r--r--js/src/tests/js1_7/regress/regress-469239-01.js36
-rw-r--r--js/src/tests/js1_7/regress/regress-469239-02.js36
-rw-r--r--js/src/tests/js1_7/regress/regress-470223.js38
-rw-r--r--js/src/tests/js1_7/regress/regress-470388-01.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-474771.js45
-rw-r--r--js/src/tests/js1_7/regress/shell.js0
51 files changed, 1754 insertions, 0 deletions
diff --git a/js/src/tests/js1_7/regress/browser.js b/js/src/tests/js1_7/regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/regress/browser.js
diff --git a/js/src/tests/js1_7/regress/regress-350387.js b/js/src/tests/js1_7/regress/regress-350387.js
new file mode 100644
index 000000000..6bdf33dd7
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-350387.js
@@ -0,0 +1,38 @@
+// |reftest| skip -- obsolete test
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 350387;
+var summary = 'Var declaration and let with same name';
+var actual = '';
+var expect = '';
+
+expect = undefined + '';
+actual = '';
+let (x = 2)
+{
+ var x;
+}
+actual = x + '';
+reportCompare(expect, actual, summary + ': 1');
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = undefined + '';
+ actual = '';
+ (function () { let (x = 2) { var x; } actual = x + ''; })();
+ reportCompare(expect, actual, summary + ': 2');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-352640-01.js b/js/src/tests/js1_7/regress/regress-352640-01.js
new file mode 100644
index 000000000..0ed722e41
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-352640-01.js
@@ -0,0 +1,33 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 352640;
+var summary = 'Do not assert: scopeStmt or crash @ js_LexicalLookup';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ new Function("do { with({}) let x; let b; } while( 1 );");
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-352640-02.js b/js/src/tests/js1_7/regress/regress-352640-02.js
new file mode 100644
index 000000000..6336e4e86
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-352640-02.js
@@ -0,0 +1,33 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 352640;
+var summary = 'Do not assert: scopeStmt or crash @ js_LexicalLookup';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ new Function("do { with({}) let x; var b; } while( 1 );");
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-352640-03.js b/js/src/tests/js1_7/regress/regress-352640-03.js
new file mode 100644
index 000000000..0499101b0
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-352640-03.js
@@ -0,0 +1,33 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 352640;
+var summary = 'Do not assert: scopeStmt or crash @ js_LexicalLookup';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ new Function("do { with({}) let x; [2 for each (b in [])]; } while( 1 );");
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-352640-04.js b/js/src/tests/js1_7/regress/regress-352640-04.js
new file mode 100644
index 000000000..477695126
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-352640-04.js
@@ -0,0 +1,33 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 352640;
+var summary = 'Do not assert: scopeStmt or crash @ js_LexicalLookup';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ new Function("switch(w) { case 2: with({}) let y; case 3: }");
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-353079.js b/js/src/tests/js1_7/regress/regress-353079.js
new file mode 100644
index 000000000..2c7fd015f
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-353079.js
@@ -0,0 +1,29 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 353079;
+var summary = 'Do not Assert op == JSOP_LEAVEBLOCKEXPR... with WAY_TOO_MUCH_GC';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (let a in [1]) { { let x;
+ for (let y in ((function(id2) { return id2; })( '' ))) { } } }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-355023.js b/js/src/tests/js1_7/regress/regress-355023.js
new file mode 100644
index 000000000..73d055990
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-355023.js
@@ -0,0 +1,31 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 355023;
+var summary = 'destructuring assignment optimization';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ Array.prototype[0] = 1024;
+
+ expect = (function(){ var a=[],[x]=a; return x; })();
+ actual = (function(){ var [x]=[]; return x; })();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-355832-01.js b/js/src/tests/js1_7/regress/regress-355832-01.js
new file mode 100644
index 000000000..dccf7e832
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-355832-01.js
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 355832;
+var summary = 'execution of let binding nothing';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = actual = 'No Crash';
+
+ { let [] = []; }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-355832-02.js b/js/src/tests/js1_7/regress/regress-355832-02.js
new file mode 100644
index 000000000..54e1506e4
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-355832-02.js
@@ -0,0 +1,30 @@
+/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 355832;
+var summary = 'execution of let binding nothing';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = actual = 'No Crash';
+
+ { let [] = []; print(3) } print(4)
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-363040-01.js b/js/src/tests/js1_7/regress/regress-363040-01.js
new file mode 100644
index 000000000..dc081fe45
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-363040-01.js
@@ -0,0 +1,95 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 363040;
+var summary = 'Array.prototype.reduce, Array.prototype.reduceRight';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(x,y) { return '(' + x + '+' + y + ')';}
+
+ var testdesc;
+ var arr0elms = [];
+ var arr1elms = [1];
+ var arr2elms = [1, 2];
+
+ testdesc = 'Test reduce of empty array without initializer.';
+ try
+ {
+ expect = 'TypeError: reduce of empty array with no initial value';
+ arr0elms.reduce(f);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduceRight of empty array without initializer.';
+ try
+ {
+ expect = 'TypeError: reduce of empty array with no initial value';
+ arr0elms.reduceRight(f);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduce of empty array with initial value.';
+ expect = 'a';
+ actual = arr0elms.reduce(f, 'a');
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduceRight of empty array with initial value.';
+ expect = 'a';
+ actual = arr0elms.reduceRight(f, 'a');
+ reportCompare(expect + '', actual + '', testdesc +' : ' + expect);
+
+ testdesc = 'Test reduce of 1 element array with no initializer.';
+ expect = '1';
+ actual = arr1elms.reduce(f);
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduceRight of 1 element array with no initializer.';
+ expect = '1';
+ actual = arr1elms.reduceRight(f);
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduce of 2 element array with no initializer.';
+ expect = '(1+2)';
+ actual = arr2elms.reduce(f);
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduce of 2 element array with initializer.';
+ expect = '((a+1)+2)';
+ actual = arr2elms.reduce(f,'a');
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduceRight of 2 element array with no initializer.';
+ expect = '(2+1)';
+ actual = arr2elms.reduceRight(f);
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduceRight of 2 element array with no initializer.';
+ expect = '((a+2)+1)';
+ actual = arr2elms.reduceRight(f,'a');
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-363040-02.js b/js/src/tests/js1_7/regress/regress-363040-02.js
new file mode 100644
index 000000000..c24e4a605
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-363040-02.js
@@ -0,0 +1,67 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 363040;
+var summary = 'Array.prototype.reduce application in array flattening';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function flatten(arr)
+ {
+ function op(partial, item)
+ {
+ if (item instanceof Array)
+ Array.prototype.push.apply(partial, flatten(item));
+ else
+ partial.push(item);
+
+ return partial;
+ }
+
+ return arr.reduce(op, []);
+ }
+
+ expect = [1, 2, 3];
+ actual = flatten([1, 2, 3]); // [1, 2, 3]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [1, 2, 3];
+ actual = flatten([1, [2], 3]); // [1, 2, 3]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [2, 3];
+ actual = flatten([[], 2, 3]); // [2, 3]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [1, 2, 3];
+ actual = flatten([[1], 2, 3]); // [1, 2, 3]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [4];
+ actual = flatten([[[[4]]]]); // [4]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [1, 2, 3];
+ actual = flatten([1, [2, [3]]]); // [1, 2, 3]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [];
+ actual = flatten([[[[[]]]]]); // []
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-369666-01.js b/js/src/tests/js1_7/regress/regress-369666-01.js
new file mode 100644
index 000000000..1be90603f
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-369666-01.js
@@ -0,0 +1,59 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 369666;
+var summary = 'inner function declaration in let-induced outer ' +
+ 'function body gets wrong scope.';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function foo() {
+ let x = 42
+
+ function bar() {
+ return x;
+ }
+
+ return bar;
+ }
+
+ print(foo()());
+
+ baz = false;
+
+ function foo2() {
+ let x = 42
+
+ function bar() {
+ return x;
+ }
+
+ try {
+ if (baz)
+ return bar;
+ } finally {
+ print('finally', x);
+ }
+ return bar;
+ }
+
+ print(foo2()());
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-369666-02.js b/js/src/tests/js1_7/regress/regress-369666-02.js
new file mode 100644
index 000000000..f55b49617
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-369666-02.js
@@ -0,0 +1,63 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 369666;
+var summary = 'inner function declaration in let-induced outer ' +
+ 'function body gets wrong scope.';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function foo() {
+ let x = 42
+
+ function bar() {
+ return x;
+ }
+
+ return bar;
+ }
+
+ print(foo()());
+
+ baz = false;
+
+ function foo2() {
+ let x = 42
+
+ function bar() {
+ return x;
+ }
+
+ function bletch() {
+ return x * x;
+ }
+
+ try {
+ if (baz)
+ return bar;
+ } finally {
+ print('finally', x);
+ }
+ return bletch;
+ }
+
+ print(foo2()());
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-372331.js b/js/src/tests/js1_7/regress/regress-372331.js
new file mode 100644
index 000000000..a9a868724
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-372331.js
@@ -0,0 +1,55 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 372331;
+var summary = 'for-in should not bind name too early';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var index;
+ var obj = { index: 1 };
+
+ expect = 'No Error';
+ actual = 'No Error';
+
+ function gen()
+ {
+ delete obj.index;
+ yield 2;
+ }
+
+ with (obj) {
+ for (index in gen());
+ }
+
+ try
+ {
+ if ('index' in obj)
+ throw "for-in binds name to early";
+
+ if (index !== 2)
+ throw "unexpected value of index: "+index;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-373827-01.js b/js/src/tests/js1_7/regress/regress-373827-01.js
new file mode 100644
index 000000000..01da279f8
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-373827-01.js
@@ -0,0 +1,28 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 373827;
+var summary = 'Do not assert: OBJ_GET_CLASS(cx, obj)->flags & JSCLASS_HAS_PRIVATE';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ { let [] = [{x: function(){}}]; };
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-373827-02.js b/js/src/tests/js1_7/regress/regress-373827-02.js
new file mode 100644
index 000000000..3596feb69
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-373827-02.js
@@ -0,0 +1,34 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 373827;
+var summary = 'Do not assert: OBJ_GET_CLASS(cx, obj)->flags & JSCLASS_HAS_PRIVATE';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ { let [] = [{x: function(){}}]; }; foo;
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-375695.js b/js/src/tests/js1_7/regress/regress-375695.js
new file mode 100644
index 000000000..508560ce9
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-375695.js
@@ -0,0 +1,27 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 375695;
+var summary = 'Do not assert: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try { try { throw 1 } catch([] if false) { } } catch(ex) {}
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-379442.js b/js/src/tests/js1_7/regress/regress-379442.js
new file mode 100644
index 000000000..639523270
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-379442.js
@@ -0,0 +1,28 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 379442;
+var summary = 'Regression from bug 368224';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ reportCompare(expect, actual, summary);
+
+ (function () { ({ y: [] } = {}); });
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-379483.js b/js/src/tests/js1_7/regress/regress-379483.js
new file mode 100644
index 000000000..f9ee84b30
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-379483.js
@@ -0,0 +1,28 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 379483;
+var summary = 'Do not assert: top < ss->printer->script->depth';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ (function () { try { } catch([e]) { [1]; } });
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-385133-01.js b/js/src/tests/js1_7/regress/regress-385133-01.js
new file mode 100644
index 000000000..03b09f535
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-385133-01.js
@@ -0,0 +1,37 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 385133;
+var summary = 'Do not crash due to recursion with watch, setter, delete, generator';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ Object.defineProperty(this, "x", { set: {}.watch, enumerable: true, configurable: true });
+ this.watch('x', 'foo'.split);
+ delete x;
+ function g(){ x = 1; yield; }
+ for (i in g()) { }
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-385133-02.js b/js/src/tests/js1_7/regress/regress-385133-02.js
new file mode 100644
index 000000000..ce429dd15
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-385133-02.js
@@ -0,0 +1,35 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 385133;
+var summary = 'Do not crash due to recursion with watch, setter, delete, generator';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ Object.defineProperty(this, "x", { set: {}.watch, enumerable: true, configurable: true });
+ function g() { x = 1; yield; }
+ g().next();
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-385393-05.js b/js/src/tests/js1_7/regress/regress-385393-05.js
new file mode 100644
index 000000000..c642c4ec6
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-385393-05.js
@@ -0,0 +1,44 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 385393;
+var summary = 'Regression test for bug 385393';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function c(gen)
+ {
+ Iterator;
+
+ "" + gen;
+
+ for (var i in gen())
+ ;
+ }
+
+ function gen()
+ {
+ ({}).hasOwnProperty();
+ yield;
+ }
+
+ c(gen);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-407727-01.js b/js/src/tests/js1_7/regress/regress-407727-01.js
new file mode 100644
index 000000000..f92113f5e
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-407727-01.js
@@ -0,0 +1,17 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 407727;
+var summary = 'let Object global redeclaration';
+var actual = '';
+var expect = 1;
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+let Object = 1;
+actual = Object;
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/regress/regress-407727-02.js b/js/src/tests/js1_7/regress/regress-407727-02.js
new file mode 100644
index 000000000..bcc7a38ab
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-407727-02.js
@@ -0,0 +1,19 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 407727;
+var summary = 'let Object block redeclaration';
+var actual = '';
+var expect = 1;
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+{
+ let Object = 1;
+ actual = Object;
+ reportCompare(expect, actual, summary);
+}
diff --git a/js/src/tests/js1_7/regress/regress-407957.js b/js/src/tests/js1_7/regress/regress-407957.js
new file mode 100644
index 000000000..ffd05bd42
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-407957.js
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 407957;
+var summary = 'Iterator is mutable.';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var obj = {};
+ var saveIterator = Iterator;
+
+ Iterator = obj;
+ reportCompare(obj, Iterator, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-410649.js b/js/src/tests/js1_7/regress/regress-410649.js
new file mode 100644
index 000000000..ddd2b2a57
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-410649.js
@@ -0,0 +1,42 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 410649;
+var summary = 'function statement and destructuring parameter name clash';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(a) {
+ function a() { }
+ return a;
+ }
+
+ function g([a, b]) {
+ function a() { }
+ return a;
+ }
+
+ expect = 'function';
+ actual = typeof f(1);
+ reportCompare(expect, actual, "type for simple parameter case");
+
+ expect = 'function';
+ actual = typeof g([1, 2]);
+ reportCompare(expect, actual, "type for destructuring parameter case");
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-414553.js b/js/src/tests/js1_7/regress/regress-414553.js
new file mode 100644
index 000000000..6f5139022
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-414553.js
@@ -0,0 +1,25 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 414553;
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+var expected = '1,2,3,4';
+
+let a = 1, [b,c] = [2,3], d = 4;
+var actual = String([a,b,c,d]);
+
+reportCompare(expected, actual, 'destructuring assignment in let');
+
+function f() {
+ {
+ let a = 1, [b,c] = [2,3], d = 4;
+ return String([a,b,c,d]);
+ }
+}
+
+reportCompare(expected, f(), 'destructuring assignment in let inside func');
diff --git a/js/src/tests/js1_7/regress/regress-416601.js b/js/src/tests/js1_7/regress/regress-416601.js
new file mode 100644
index 000000000..197bf29af
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-416601.js
@@ -0,0 +1,37 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 416601;
+var summary = 'Property cache can be left disabled after exit from a generator or trap handler';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f()
+ {
+ with (Math) {
+ yield 1;
+ }
+ }
+
+ var iter = f();
+ iter.next();
+ iter.close();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-418641.js b/js/src/tests/js1_7/regress/regress-418641.js
new file mode 100644
index 000000000..7d194fc32
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-418641.js
@@ -0,0 +1,80 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 418641;
+var summary = '++ and -- correctness';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function get_pre_check(operand, op)
+{
+ return "{\n"+
+ " "+operand+" = I;\n"+
+ " let tmp = "+op+op+operand+";\n"+
+ " if ("+operand+" !== Number(I) "+op+" 1)\n"+
+ " throw Error('"+op+op+operand+" case 1 for '+uneval(I));\n"+
+ " if (tmp !== "+operand+")\n"+
+ " throw Error('"+op+op+operand+" case 2 for '+uneval(I));\n"+
+ "}\n";
+}
+
+function get_post_check(operand, op)
+{
+ return "{\n"+
+ " "+operand+" = I;\n"+
+ " let tmp = "+operand+op+op+";\n"+
+ " if ("+operand+" !== Number(I) "+op+" 1)\n"+
+ " throw Error('"+operand+op+op+" case 1 for '+uneval(I));\n"+
+ " if (tmp !== Number(I))\n"+
+ " throw Error('"+op+op+operand+" case 2 for '+uneval(I));\n"+
+ "}\n";
+}
+
+function get_check_source(operand)
+{
+ return get_pre_check(operand, '+')+
+ get_pre_check(operand, '-')+
+ get_post_check(operand, '+')+
+ get_post_check(operand, '-');
+}
+
+var arg_check = Function('I', 'a', get_check_source('a'));
+var let_check = Function('I', 'let a;'+get_check_source('a'));
+var var_check = Function('I', 'var a;'+get_check_source('a'));
+
+var my_name;
+var my_obj = {};
+var my_index = 0;
+var name_check = Function('I', get_check_source('my_name'));
+var prop_check = Function('I', get_check_source('my_obj.x'));
+var elem_check = Function('I', get_check_source('my_obj[my_index]'));
+
+var test_values = [0 , 0.5, -0.0, (1 << 30) - 1, 1 - (1 << 30)];
+
+for (let i = 0; i != test_values.length; i = i + 1) {
+ let x = [test_values[i], String(test_values[i])];
+ for (let j = 0; j != x.length; j = j + 1) {
+ try
+ {
+ expect = actual = 'No Error';
+ let test_value = x[j];
+ arg_check(test_value, 0);
+ let_check(test_value);
+ var_check(test_value);
+ name_check(test_value);
+ prop_check(test_value);
+ elem_check(test_value);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + i + ', ' + j);
+ }
+}
diff --git a/js/src/tests/js1_7/regress/regress-419803.js b/js/src/tests/js1_7/regress/regress-419803.js
new file mode 100644
index 000000000..aa4b56aad
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-419803.js
@@ -0,0 +1,31 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 419803;
+var summary = 'Do not assert: sprop->parent == scope->lastProp';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function g() { for (var i=0; i<2; ++i) yield ({ p: 5, p: 7 }); }
+ var iter = g();
+ print(uneval(iter.next()));
+ print(uneval(iter.next()));
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-452703.js b/js/src/tests/js1_7/regress/regress-452703.js
new file mode 100644
index 000000000..e86f2625f
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-452703.js
@@ -0,0 +1,19 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 452703;
+var summary = 'Do not assert with JIT: rmask(rr)&FpRegs';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+(function() { for(let y in [0,1,2,3,4]) y = NaN; })();
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/regress/regress-452960.js b/js/src/tests/js1_7/regress/regress-452960.js
new file mode 100644
index 000000000..8b58fd15a
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-452960.js
@@ -0,0 +1,31 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 452960;
+var summary = 'Do not assert with JIT: !v.isPrimitive()';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ var f = function(){};
+ f.prototype = false;
+ for (let j=0;j<5;++j) { new f; }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-453049.js b/js/src/tests/js1_7/regress/regress-453049.js
new file mode 100644
index 000000000..77ca02a5d
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-453049.js
@@ -0,0 +1,29 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 453049;
+var summary = 'Do not assert with JIT: (*m != JSVAL_INT) || isInt32(*vp)';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ var z = 0; for (let j = 0; j < 5; ++j) { ({p: (-z)}); }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-453051.js b/js/src/tests/js1_7/regress/regress-453051.js
new file mode 100644
index 000000000..706f6c7e1
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-453051.js
@@ -0,0 +1,29 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 453051;
+var summary = 'Do not assert with JIT: !(((*pc == JSOP_GOTO) || (*pc == JSOP_GOTOX)) && (exitType != LOOP_EXIT))';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (var p in this){} for (let a in [5,6,7]) for (var b=0;b<1;++b) break;
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-453411.js b/js/src/tests/js1_7/regress/regress-453411.js
new file mode 100644
index 000000000..d3a490ac4
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-453411.js
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 453411;
+var summary = 'Do not assert with JIT: !cx->executingTrace|!tm->onTrace';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (var i in (function(){ for (var j=0;j<4;++j) { yield ""; } })());
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-462071.js b/js/src/tests/js1_7/regress/regress-462071.js
new file mode 100644
index 000000000..8282184bb
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-462071.js
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 462071;
+var summary = 'Do not assert: !ti->stackTypeMap.matches(ti_other->stackTypeMap)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for each (let i in [{}, 0, 0, {}, 0, {}, 0]) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-462282.js b/js/src/tests/js1_7/regress/regress-462282.js
new file mode 100644
index 000000000..2ba12998a
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-462282.js
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 462282;
+var summary = 'Do not assert: !ti->stackTypeMap.matches(ti_other->stackTypeMap)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for each (let i in [0, 0, 0, "", 0, 0, "", 0, 0, "", 0]) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-462388.js b/js/src/tests/js1_7/regress/regress-462388.js
new file mode 100644
index 000000000..b1f03e61e
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-462388.js
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 462388;
+var summary = 'Do not assert: JSVAL_TAG(v) == JSVAL_STRING';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ var c = 0, v; for each (let x in ["",v,v,v]) { for (c=0;c<4;++c) { } }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-462407.js b/js/src/tests/js1_7/regress/regress-462407.js
new file mode 100644
index 000000000..236f1aae4
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-462407.js
@@ -0,0 +1,19 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 462407;
+var summary = 'Do not assert: !ti->stackTypeMap.matches(ti_other->stackTypeMap)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+(function f() { for each (let i in [0, {}, 0, 1.5, {}, 0, 1.5, 0, 0]) { }})();
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/regress/regress-464403.js b/js/src/tests/js1_7/regress/regress-464403.js
new file mode 100644
index 000000000..c26ab44d3
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-464403.js
@@ -0,0 +1,32 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 464403;
+var summary = 'Do not assert: tm->recorder != NULL';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ print(8);
+ var u = [print, print, function(){}];
+ for each (x in u) for (u.e in [1,1,1,1]);
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-465236.js b/js/src/tests/js1_7/regress/regress-465236.js
new file mode 100644
index 000000000..f446c27a9
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-465236.js
@@ -0,0 +1,28 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 465236;
+var summary = 'TM: Do not assert: we should have converted to numbers already';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (let j = 0; j < 2; ++j) null <= null;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-465424.js b/js/src/tests/js1_7/regress/regress-465424.js
new file mode 100644
index 000000000..dd11d1303
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-465424.js
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 465424;
+var summary = 'TM: issue with post-decrement operator';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '0,1,2,3,4,';
+
+ for (let j=0;j<5;++j) { jj=j; print(actual += '' + (jj--) + ',') }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-465484.js b/js/src/tests/js1_7/regress/regress-465484.js
new file mode 100644
index 000000000..3f430e137
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-465484.js
@@ -0,0 +1,28 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 465484;
+var summary = 'TM: Do not assert: _allocator.active[FST0] && _fpuStkDepth == -1 || ' +
+ '!_allocator.active[FST0] && _fpuStkDepth == 0';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for each (let a in [2, 2, 2]) { a %= a; a %= a; }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-465686.js b/js/src/tests/js1_7/regress/regress-465686.js
new file mode 100644
index 000000000..8e92a2914
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-465686.js
@@ -0,0 +1,35 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 465686;
+var summary = 'Do not crash @ tiny_free_list_add_ptr';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for each (let b in [eval, eval, 4, 4]) {
+ ++b;
+ for each (b in [(void 0), (void 0), (void 0), 3, (void 0), 3]) {
+ b ^= b;
+ for each (var c in [1/0]) {
+ }
+ }
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-469239-01.js b/js/src/tests/js1_7/regress/regress-469239-01.js
new file mode 100644
index 000000000..7fa5a7e61
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-469239-01.js
@@ -0,0 +1,36 @@
+/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 469239;
+var summary = 'TM: Do not assert: entry->kpc == (jsbytecode*) atoms[index]';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let b=0;b<9;++b) {
+ for each (let h in ['', 3, /x/]) {
+ for each (c in [[], [], [], /x/]) {
+ '' + c;
+ }
+ }
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-469239-02.js b/js/src/tests/js1_7/regress/regress-469239-02.js
new file mode 100644
index 000000000..4396f83f0
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-469239-02.js
@@ -0,0 +1,36 @@
+/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 469239;
+var summary = 'TM: Do not assert: ATOM_IS_STRING(atom)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let b=0;b<9;++b) {
+ for each (let h in [33, 3, /x/]) {
+ for each (c in [[], [], [], /x/]) {
+ '' + c;
+ }
+ }
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-470223.js b/js/src/tests/js1_7/regress/regress-470223.js
new file mode 100644
index 000000000..725e22983
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-470223.js
@@ -0,0 +1,38 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 470223;
+var summary = 'TM: Do not crash @ js_NewObjectWithGivenProto';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ function F(A) {
+ for (R = [], s = 0; (m = A.indexOf("m", s++)) >= 0; )
+ R.push([m]);
+ for (i = R.length; i--; ) {
+ let r = R[i];
+ if (r[0]);
+ }
+ }
+ F("m"); F("mm");
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-470388-01.js b/js/src/tests/js1_7/regress/regress-470388-01.js
new file mode 100644
index 000000000..ac18f9b07
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-470388-01.js
@@ -0,0 +1,28 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 470388;
+var summary = 'TM: Do not assert: !(fp->flags & JSFRAME_POP_BLOCKS)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for each (let x in [function(){}, new Boolean(false), function(){}]) {}
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-474771.js b/js/src/tests/js1_7/regress/regress-474771.js
new file mode 100644
index 000000000..ae20d2c5d
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-474771.js
@@ -0,0 +1,45 @@
+// |reftest| skip-if(Android)
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 474771;
+var summary = 'TM: do not halt execution with gczeal, prototype mangling, for..in';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'PASS';
+
+ if (typeof gczeal == 'function')
+ {
+ gczeal(2);
+ }
+
+ Object.prototype.q = 3;
+ for each (let x in [6, 7]) { } print(actual = "PASS");
+
+
+ delete Object.prototype.q;
+
+ if (typeof gczeal == 'function')
+ {
+ gczeal(0);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/shell.js b/js/src/tests/js1_7/regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/regress/shell.js