From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001
From: "Matt A. Tobin" <mattatobin@localhost.localdomain>
Date: Fri, 2 Feb 2018 04:16:08 -0500
Subject: Add m-esr52 at 52.6.0

---
 js/src/tests/js1_5/Exceptions/browser.js          |   0
 js/src/tests/js1_5/Exceptions/catchguard-002-n.js |  36 ++++
 js/src/tests/js1_5/Exceptions/catchguard-003-n.js |  40 ++++
 js/src/tests/js1_5/Exceptions/errstack-001.js     | 245 ++++++++++++++++++++++
 js/src/tests/js1_5/Exceptions/regress-121658.js   | 124 +++++++++++
 js/src/tests/js1_5/Exceptions/regress-123002.js   |  93 ++++++++
 js/src/tests/js1_5/Exceptions/regress-257751.js   |  92 ++++++++
 js/src/tests/js1_5/Exceptions/regress-273931.js   |  74 +++++++
 js/src/tests/js1_5/Exceptions/regress-315147.js   |  36 ++++
 js/src/tests/js1_5/Exceptions/regress-332472.js   |  25 +++
 js/src/tests/js1_5/Exceptions/regress-333728.js   |  83 ++++++++
 js/src/tests/js1_5/Exceptions/regress-342359.js   |  43 ++++
 js/src/tests/js1_5/Exceptions/regress-347674.js   |  63 ++++++
 js/src/tests/js1_5/Exceptions/regress-350650-n.js |  31 +++
 js/src/tests/js1_5/Exceptions/regress-350837.js   |  46 ++++
 js/src/tests/js1_5/Exceptions/shell.js            |   0
 16 files changed, 1031 insertions(+)
 create mode 100644 js/src/tests/js1_5/Exceptions/browser.js
 create mode 100644 js/src/tests/js1_5/Exceptions/catchguard-002-n.js
 create mode 100644 js/src/tests/js1_5/Exceptions/catchguard-003-n.js
 create mode 100644 js/src/tests/js1_5/Exceptions/errstack-001.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-121658.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-123002.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-257751.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-273931.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-315147.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-332472.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-333728.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-342359.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-347674.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-350650-n.js
 create mode 100644 js/src/tests/js1_5/Exceptions/regress-350837.js
 create mode 100644 js/src/tests/js1_5/Exceptions/shell.js

(limited to 'js/src/tests/js1_5/Exceptions')

diff --git a/js/src/tests/js1_5/Exceptions/browser.js b/js/src/tests/js1_5/Exceptions/browser.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/js/src/tests/js1_5/Exceptions/catchguard-002-n.js b/js/src/tests/js1_5/Exceptions/catchguard-002-n.js
new file mode 100644
index 000000000..64c8ea081
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/catchguard-002-n.js
@@ -0,0 +1,36 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*-
+ * 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/. */
+
+
+DESCRIPTION = "var in catch clause should have caused an error.";
+EXPECTED = "error";
+
+var expect;
+var actual;
+
+test();
+
+function test()
+{
+  enterFunc ("test");
+
+  var EXCEPTION_DATA = "String exception";
+  var e;
+
+  printStatus ("Catchguard var declaration negative test.");
+   
+  try
+  {   
+    throw EXCEPTION_DATA;  
+  }
+  catch (var e)
+  {  
+    actual = e + '';
+  }
+
+  reportCompare(expect, actual, DESCRIPTION);
+
+  exitFunc ("test");
+}
diff --git a/js/src/tests/js1_5/Exceptions/catchguard-003-n.js b/js/src/tests/js1_5/Exceptions/catchguard-003-n.js
new file mode 100644
index 000000000..e9e99eb49
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/catchguard-003-n.js
@@ -0,0 +1,40 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*-
+ * 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/. */
+
+
+DESCRIPTION = "Illegally constructed catchguard should have thrown an exception.";
+EXPECTED = "error";
+
+var expect;
+var actual;
+
+test();
+
+function test()
+{
+  enterFunc ("test");
+
+  var EXCEPTION_DATA = "String exception";
+  var e;
+
+  printStatus ("Catchguard syntax negative test #2.");
+   
+  try
+  {   
+    throw EXCEPTION_DATA;  
+  }
+  catch (e)
+  {  
+    actual = e + ': 1';
+  }
+  catch (e) /* two non-guarded catch statements should generate an error */
+  {
+    actual = e + ': 2';
+  }
+
+  reportCompare(expect, actual, DESCRIPTION);
+
+  exitFunc ("test");
+}
diff --git a/js/src/tests/js1_5/Exceptions/errstack-001.js b/js/src/tests/js1_5/Exceptions/errstack-001.js
new file mode 100644
index 000000000..834ce037b
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/errstack-001.js
@@ -0,0 +1,245 @@
+/* -*- 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/. */
+
+/*
+ *
+ * Date:    28 Feb 2002
+ * SUMMARY: Testing that Error.stack distinguishes between:
+ *
+ * A) top-level calls: myFunc();
+ * B) no-name function calls: function() { myFunc();} ()
+ *
+ * The stack frame for A) should begin with '@'
+ * The stack frame for B) should begin with '()'
+ *
+ * This behavior was coded by Brendan during his fix for bug 127136.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=127136#c13
+ *
+ * Note: our function getStackFrames(err) orders the array of stack frames
+ * so that the 0th element will correspond to the highest frame, i.e. will
+ * correspond to a line in top-level code. The 1st element will correspond
+ * to the function that is called first, and so on...
+ *
+ * NOTE: At present Rhino does not have an Error.stack property. It is an
+ * ECMA extension, see http://bugzilla.mozilla.org/show_bug.cgi?id=123177
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing Error.stack';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var myErr = '';
+var stackFrames = '';
+
+
+function A(x,y)
+{
+  return B(x+1,y+1);
+}
+
+function B(x,z)
+{
+  return C(x+1,z+1);
+}
+
+function C(x,y)
+{
+  return D(x+1,y+1);
+}
+
+function D(x,z)
+{
+  try
+  {
+    throw new Error('meep!');
+  }
+  catch (e)
+  {
+    return e;
+  }
+}
+
+
+myErr = A(44,13);
+stackFrames = getStackFrames(myErr);
+status = inSection(1);
+actual = stackFrames[0].substring(0,1);
+expect = '@';
+addThis();
+
+status = inSection(2);
+actual = stackFrames[1].substring(0,2);
+expect = 'A@';
+addThis();
+
+status = inSection(3);
+actual = stackFrames[2].substring(0,2);
+expect = 'B@';
+addThis();
+
+status = inSection(4);
+actual = stackFrames[3].substring(0,2);
+expect = 'C@';
+addThis();
+
+status = inSection(5);
+actual = stackFrames[4].substring(0,2);
+expect = 'D@';
+addThis();
+
+
+
+myErr = A('44:foo','13:bar');
+stackFrames = getStackFrames(myErr);
+status = inSection(6);
+actual = stackFrames[0].substring(0,1);
+expect = '@';
+addThis();
+
+status = inSection(7);
+actual = stackFrames[1].substring(0,2);
+expect = 'A@';
+addThis();
+
+status = inSection(8);
+actual = stackFrames[2].substring(0,2);
+expect = 'B@';
+addThis();
+
+status = inSection(9);
+actual = stackFrames[3].substring(0,2);
+expect = 'C@';
+addThis();
+
+status = inSection(10);
+actual = stackFrames[4].substring(0,2);
+expect = 'D@';;
+addThis();
+
+
+
+/*
+ * Make the first frame occur in a function with an empty name -
+ */
+myErr = function() { return A(44,13); } ();
+stackFrames = getStackFrames(myErr);
+status = inSection(11);
+actual = stackFrames[0].substring(0,1);
+expect = '@';
+addThis();
+
+status = inSection(12);
+actual = stackFrames[1].substring(0,7);
+expect = 'myErr<@';
+addThis();
+
+status = inSection(13);
+actual = stackFrames[2].substring(0,2);
+expect = 'A@';
+addThis();
+
+// etc. for the rest of the frames as above
+
+
+
+/*
+ * Make the first frame occur in a function with name 'anonymous' -
+ */
+var f = Function('return A(44,13);');
+myErr = f();
+stackFrames = getStackFrames(myErr);
+status = inSection(14);
+actual = stackFrames[0].substring(0,1);
+expect = '@';
+addThis();
+
+status = inSection(15);
+actual = stackFrames[1].substring(0,10);
+expect = 'anonymous@';
+addThis();
+
+status = inSection(16);
+actual = stackFrames[2].substring(0,2);
+expect = 'A@';
+addThis();
+
+// etc. for the rest of the frames as above
+
+
+
+/*
+ * Make a user-defined error via the Error() function -
+ */
+var message = 'Hi there!'; var fileName = 'file name'; var lineNumber = 0;
+myErr = Error(message, fileName, lineNumber);
+stackFrames = getStackFrames(myErr);
+status = inSection(17);
+actual = stackFrames[0].substring(0,1);
+expect = '@';
+addThis();
+
+
+/*
+ * Now use the |new| keyword. Re-use the same params -
+ */
+myErr = new Error(message, fileName, lineNumber);
+stackFrames = getStackFrames(myErr);
+status = inSection(18);
+actual = stackFrames[0].substring(0,1);
+expect = '@';
+addThis();
+
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+/*
+ * Split the string |err.stack| along its '\n' delimiter.
+ * As of 2002-02-28 |err.stack| ends with the delimiter, so
+ * the resulting array has an empty string as its last element.
+ *
+ * Pop that useless element off before doing anything.
+ * Then reverse the array, for convenience of indexing -
+ */
+function getStackFrames(err)
+{
+  var arr = err.stack.split('\n');
+  arr.pop();
+  return arr.reverse();
+}
+
+
+function addThis()
+{
+  statusitems[UBound] = status;
+  actualvalues[UBound] = actual;
+  expectedvalues[UBound] = expect;
+  UBound++;
+}
+
+
+function test()
+{
+  enterFunc('test');
+  printBugNumber(BUGNUMBER);
+  printStatus(summary);
+
+  for (var i=0; i<UBound; i++)
+  {
+    reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
+  }
+
+  exitFunc ('test');
+}
diff --git a/js/src/tests/js1_5/Exceptions/regress-121658.js b/js/src/tests/js1_5/Exceptions/regress-121658.js
new file mode 100644
index 000000000..8da92a7ec
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-121658.js
@@ -0,0 +1,124 @@
+/* -*- 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/. */
+
+/*
+ *
+ * Date:    24 Jan 2002
+ * SUMMARY: "Too much recursion" errors should be safely caught by try...catch
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=121658
+ *
+ * In the cases below, we expect i>0. The bug was filed because we
+ * were getting i===0; i.e. |i| did not retain the value it had at the
+ * location of the error.
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 121658;
+var msg = '"Too much recursion" errors should be safely caught by try...catch';
+var TEST_PASSED = 'i retained the value it had at location of error';
+var TEST_FAILED = 'i did NOT retain this value';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var i;
+
+
+function f()
+{
+  ++i;
+
+  // try...catch should catch the "too much recursion" error to ensue
+  try
+  {
+    f();
+  }
+  catch(e)
+  {
+  }
+}
+
+i=0;
+f();
+status = inSection(1);
+actual = (i>0);
+expect = true;
+addThis();
+
+
+
+// Now try in function scope -
+function g()
+{
+  f();
+}
+
+i=0;
+g();
+status = inSection(2);
+actual = (i>0);
+expect = true;
+addThis();
+
+
+
+// Now try in eval scope -
+var sEval = 'function h(){++i; try{h();} catch(e){}}; i=0; h();';
+eval(sEval);
+status = inSection(3);
+actual = (i>0);
+expect = true;
+addThis();
+
+
+
+// Try in eval scope and mix functions up -
+sEval = 'function a(){++i; try{h();} catch(e){}}; i=0; a();';
+eval(sEval);
+status = inSection(4);
+actual = (i>0);
+expect = true;
+addThis();
+
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+  statusitems[UBound] = status;
+  actualvalues[UBound] = formatThis(actual);
+  expectedvalues[UBound] = formatThis(expect);
+  UBound++;
+}
+
+
+function formatThis(bool)
+{
+  return bool? TEST_PASSED : TEST_FAILED;
+}
+
+
+function test()
+{
+  enterFunc('test');
+  printBugNumber(BUGNUMBER);
+  printStatus(msg);
+
+  for (var i=0; i<UBound; i++)
+  {
+    reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
+  }
+
+  exitFunc ('test');
+}
diff --git a/js/src/tests/js1_5/Exceptions/regress-123002.js b/js/src/tests/js1_5/Exceptions/regress-123002.js
new file mode 100644
index 000000000..ab9d73b60
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-123002.js
@@ -0,0 +1,93 @@
+/* -*- 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/. */
+
+/*
+ *
+ * Date:    01 Feb 2002
+ * SUMMARY: Testing Error.length
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=123002
+ *
+ * NOTE: Error.length should equal the length of FormalParameterList of the
+ * Error constructor. This is currently 1 in Rhino, 3 in SpiderMonkey.
+ *
+ * The difference is due to http://bugzilla.mozilla.org/show_bug.cgi?id=50447.
+ * As a result of that bug, SpiderMonkey has extended ECMA to allow two new
+ * parameters to Error constructors:
+ *
+ * Rhino:        new Error (message)
+ * SpiderMonkey: new Error (message, fileName, lineNumber)
+ *
+ * NOTE: since we have hard-coded the length expectations, this testcase will
+ * have to be changed if the Error FormalParameterList is ever changed again.
+ *
+ * To do this, just change the two LENGTH constants below -
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 123002;
+var summary = 'Testing Error.length';
+var QUOTE = '"';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+var LENGTH_EXPECTED = 1;
+
+/*
+ * The various NativeError objects; see ECMA-262 Edition 3, Section 15.11.6
+ */
+var errObjects = [new Error(), new EvalError(), new RangeError(),
+		  new ReferenceError(), new SyntaxError(), new TypeError(), new URIError()];
+
+
+for (var i in errObjects)
+{
+  var err = errObjects[i];
+  status = inSection(quoteThis(err.name));
+  actual = Error.length;
+  expect = LENGTH_EXPECTED;
+  addThis();
+}
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+  statusitems[UBound] = status;
+  actualvalues[UBound] = actual;
+  expectedvalues[UBound] = expect;
+  UBound++;
+}
+
+
+function test()
+{
+  enterFunc('test');
+  printBugNumber(BUGNUMBER);
+  printStatus(summary);
+
+  for (var i=0; i<UBound; i++)
+  {
+    reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
+  }
+
+  exitFunc ('test');
+}
+
+
+function quoteThis(text)
+{
+  return QUOTE + text + QUOTE;
+}
diff --git a/js/src/tests/js1_5/Exceptions/regress-257751.js b/js/src/tests/js1_5/Exceptions/regress-257751.js
new file mode 100644
index 000000000..f95dedff4
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-257751.js
@@ -0,0 +1,92 @@
+/* -*- 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 = 257751;
+var summary = 'RegExp Syntax Errors should have lineNumber and fileName';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var status;
+var re;
+
+status = summary + ' ' + inSection(1) + ' RegExp("\\\\") ';
+try
+{
+  expect = 'Pass';
+  re = RegExp('\\');
+}
+catch(e)
+{
+  if (e.fileName && e.lineNumber)
+  {
+    actual = 'Pass';
+  }
+  else
+  {
+    actual = 'Fail';
+  }
+}
+reportCompare(expect, actual, status);
+
+status = summary + ' ' + inSection(2) + ' RegExp(")") ';
+try
+{
+  expect = 'Pass';
+  re = RegExp(')');
+}
+catch(e)
+{
+  if (e.fileName && e.lineNumber)
+  {
+    actual = 'Pass';
+  }
+  else
+  {
+    actual = 'Fail';
+  }
+}
+reportCompare(expect, actual, status);
+
+status = summary + ' ' + inSection(3) + ' /\\\\/ ';
+try
+{
+  expect = 'Pass';
+  re = eval('/\\/');
+}
+catch(e)
+{
+  if (e.fileName && e.lineNumber)
+  {
+    actual = 'Pass';
+  }
+  else
+  {
+    actual = 'Fail';
+  }
+}
+reportCompare(expect, actual, status);
+
+status = summary + ' ' + inSection(4) + ' /)/ ';
+try
+{
+  expect = 'Pass';
+  re = eval('/)/');
+}
+catch(e)
+{
+  if (e.fileName && e.lineNumber)
+  {
+    actual = 'Pass';
+  }
+  else
+  {
+    actual = 'Fail';
+  }
+}
+reportCompare(expect, actual, status);
diff --git a/js/src/tests/js1_5/Exceptions/regress-273931.js b/js/src/tests/js1_5/Exceptions/regress-273931.js
new file mode 100644
index 000000000..000b5f310
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-273931.js
@@ -0,0 +1,74 @@
+/* -*- 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 = 273931;
+var summary = 'Pop scope chain in exception handling';
+var actual = '';
+var expect = 'ReferenceError';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+status = summary + ' ' + inSection(1) + ' ';
+try
+{
+  with ({foo:"bar"})
+    throw 42;
+}
+catch (e)
+{
+  try
+  {
+    printStatus(foo);
+  }
+  catch(ee)
+  {
+    actual = ee.name;
+  }
+}
+ 
+reportCompare(expect, actual, status);
+
+status = summary + ' ' + inSection(2) + ' ';
+try
+{
+  with ({foo:"bar"})
+    eval("throw 42");
+}
+catch (e)
+{
+  try
+  {
+    printStatus(foo);
+  }
+  catch(ee)
+  {
+    actual = ee.name;
+  }
+}
+ 
+reportCompare(expect, actual, status);
+
+status = summary + ' ' + inSection(3) + ' ';
+try
+{
+  var s = "throw 42";
+  with ({foo:"bar"})
+    eval(s);
+}
+catch (e)
+{
+  try
+  {
+    printStatus(foo);
+  }
+  catch(ee)
+  {
+    actual = ee.name;
+  }
+}
+ 
+reportCompare(expect, actual, status);
diff --git a/js/src/tests/js1_5/Exceptions/regress-315147.js b/js/src/tests/js1_5/Exceptions/regress-315147.js
new file mode 100644
index 000000000..49b49ae5f
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-315147.js
@@ -0,0 +1,36 @@
+/* -*- 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 = 315147;
+var summary = 'Error JSMSG_UNDEFINED_PROP should be JSEXN_REFERENCEERR';
+var actual = '';
+var expect = 'ReferenceError';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+if (!options().match(/strict/))
+{
+  options('strict');
+}
+if (!options().match(/werror/))
+{
+  options('werror');
+}
+
+var o = {};
+
+try
+{
+  o.foo;
+  actual = 'no error';
+}
+catch(ex)
+{
+  actual = ex.name;
+}
+ 
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_5/Exceptions/regress-332472.js b/js/src/tests/js1_5/Exceptions/regress-332472.js
new file mode 100644
index 000000000..df17f2ebe
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-332472.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 = 332472;
+var summary = 'new RegExp() ignores string boundaries when throwing exceptions';
+var actual = '';
+var expect = true;
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var str1 = "?asdf\nAnd you really shouldn't see this!";
+var str2 = str1.substr(0, 5);
+try {
+  new RegExp(str2);
+}
+catch(ex) {
+  printStatus(ex);
+  actual = ex instanceof SyntaxError;
+}
+ 
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_5/Exceptions/regress-333728.js b/js/src/tests/js1_5/Exceptions/regress-333728.js
new file mode 100644
index 000000000..bf6f4ea34
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-333728.js
@@ -0,0 +1,83 @@
+/* -*- 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 = 333728;
+var summary = 'Throw ReferenceErrors for typeof(...undef)';
+var actual = '';
+var expect = 'ReferenceError';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+  actual = typeof (0, undef);
+}
+catch(ex)
+{
+  actual = ex.name;
+}
+ 
+reportCompare(expect, actual, summary + ': typeof (0, undef)');
+
+try
+{
+  actual = typeof (0 || undef);
+}
+catch(ex)
+{
+  actual = ex.name;
+}
+ 
+reportCompare(expect, actual, summary + ': typeof (0 || undef)');
+
+try
+{
+  actual = typeof (1 && undef);
+}
+catch(ex)
+{
+  actual = ex.name;
+}
+ 
+reportCompare(expect, actual, summary + ': typeof (1 && undef)');
+
+/*
+  try
+  {
+  actual = typeof (0 ? 0 : undef);
+  }
+  catch(ex)
+  {
+  actual = ex.name;
+  }
+ 
+  reportCompare(expect, actual, summary + ': typeof (0 ? 0 : undef)');
+*/
+
+/*
+  try
+  {
+  actual = typeof (1 ? undef : 0);
+  }
+  catch(ex)
+  {
+  actual = ex.name;
+  }
+ 
+  reportCompare(expect, actual, summary + ': typeof (1 ? undef : 0)');
+*/
+
+try
+{
+  actual = typeof (!this ? 0 : undef);
+}
+catch(ex)
+{
+  actual = ex.name;
+}
+ 
+reportCompare(expect, actual, summary + ': typeof (!this ? 0 : undef)');
diff --git a/js/src/tests/js1_5/Exceptions/regress-342359.js b/js/src/tests/js1_5/Exceptions/regress-342359.js
new file mode 100644
index 000000000..af5e2647f
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-342359.js
@@ -0,0 +1,43 @@
+/* -*- 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 = 342359;
+var summary = 'Overriding ReferenceError should stick';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+// work around bug 376957
+var SavedReferenceError = ReferenceError;
+
+try
+{
+  ReferenceError = 5;
+}
+catch(ex)
+{
+}
+
+try
+{
+  foo.blitz;
+}
+catch(ex)
+{
+}
+
+if (SavedReferenceError == ReferenceError)
+{
+  actual = expect = 'Test ignored due to bug 376957';
+}
+else
+{
+  expect = 5;
+  actual = ReferenceError;
+} 
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_5/Exceptions/regress-347674.js b/js/src/tests/js1_5/Exceptions/regress-347674.js
new file mode 100644
index 000000000..63bc36616
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-347674.js
@@ -0,0 +1,63 @@
+/* -*- 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     = "347674";
+var summary = "ReferenceError thrown when accessing exception bound in a " +
+  "catch block in a try block within that catch block";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+function foo()
+{
+  try
+  {
+    throw "32.9";
+  }
+  catch (e)
+  {
+    try
+    {
+      var errorCode = /^(\d+)\s+.*$/.exec(e)[1];
+    }
+    catch (e2)
+    {
+      void("*** internal error: e == " + e + ", e2 == " + e2);
+      throw e2;
+    }
+  }
+}
+
+try
+{
+  try
+  {
+    foo();
+  }
+  catch (ex)
+  {
+    if (!(ex instanceof TypeError))
+      throw "Wrong value thrown!\n" +
+	"  expected: a TypeError ('32.9' doesn't match the regexp)\n" +
+	"  actual: " + ex;
+  }
+}
+catch (e)
+{
+  failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_5/Exceptions/regress-350650-n.js b/js/src/tests/js1_5/Exceptions/regress-350650-n.js
new file mode 100644
index 000000000..aafb6734a
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-350650-n.js
@@ -0,0 +1,31 @@
+// |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 = 350650;
+var summary = 'js reports "uncaught exception';
+var actual = 'Error';
+var expect = 'Error';
+
+expectExitCode(3);
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+  enterFunc ('test');
+  printBugNumber(BUGNUMBER);
+  printStatus (summary);
+ 
+  function exc() { this.toString = function() { return "EXC"; } }
+  throw new exc();
+
+  reportCompare(expect, actual, summary);
+
+  exitFunc ('test');
+}
diff --git a/js/src/tests/js1_5/Exceptions/regress-350837.js b/js/src/tests/js1_5/Exceptions/regress-350837.js
new file mode 100644
index 000000000..f15cba4d0
--- /dev/null
+++ b/js/src/tests/js1_5/Exceptions/regress-350837.js
@@ -0,0 +1,46 @@
+/* -*- 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 = 350837;
+var summary = 'clear cx->throwing in finally';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+  enterFunc ('test');
+  printBugNumber(BUGNUMBER);
+  printStatus (summary);
+ 
+  expect = 'F';
+
+  function f()
+  {
+    actual = "F";
+  }
+
+  try
+  {
+    try {
+      throw 1;
+    } finally {
+      f.call(this);
+    }
+  }
+  catch(ex)
+  {
+    reportCompare(1, ex, summary);
+  }
+
+  reportCompare(expect, actual, summary);
+
+  exitFunc ('test');
+}
diff --git a/js/src/tests/js1_5/Exceptions/shell.js b/js/src/tests/js1_5/Exceptions/shell.js
new file mode 100644
index 000000000..e69de29bb
-- 
cgit v1.2.3