From ffec41b7af61a4f8f43efdaa81ae8de00124aec4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bargull?= <andre.bargull@gmail.com>
Date: Mon, 7 Sep 2015 18:56:02 +0200
Subject: [PATCH] Improve compatibility for engines without support for Annex B

---
 .../RegExp-control-escape-russian-letter.js}  |  1 +
 .../RegExp-decimal-escape-class-range.js}     |  1 +
 .../RegExp-decimal-escape-not-capturing.js}   |  1 +
 test/annexB/RegExp-leading-escape-BMP.js      | 29 +++++++++
 test/annexB/RegExp-leading-escape.js          | 14 +++++
 test/annexB/RegExp-trailing-escape-BMP.js     | 29 +++++++++
 test/annexB/RegExp-trailing-escape.js         | 14 +++++
 ...atch-redeclared-var-statement-captured.js} |  2 +-
 .../catch-redeclared-var-statement.js}        |  2 +-
 test/built-ins/Function/15.3.5.4_2-12gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-14gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-75gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-76gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-77gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-78gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-79gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-80gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-81gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-82gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-83gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-84gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-85gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-86gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-87gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-88gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-89gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-90gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-91gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-92gs.js    |  1 +
 test/built-ins/Function/15.3.5.4_2-93gs.js    |  1 +
 test/built-ins/RegExp/S15.10.2.10_A5.1_T1.js  | 12 ++--
 test/built-ins/RegExp/S15.10.2.6_A4_T7.js     | 29 +++++++--
 test/built-ins/RegExp/S15.10.2_A1_T1.js       |  8 +--
 test/language/arguments-object/10.6-13-a-2.js |  1 +
 test/language/arguments-object/10.6-13-a-3.js |  1 +
 .../literals/regexp/S7.8.5_A1.1_T2.js         | 56 +++++------------
 .../literals/regexp/S7.8.5_A1.4_T1.js         | 18 ++----
 .../literals/regexp/S7.8.5_A1.4_T2.js         | 62 +++++++------------
 .../literals/regexp/S7.8.5_A2.1_T2.js         | 57 +++++------------
 .../literals/regexp/S7.8.5_A2.4_T1.js         | 18 ++----
 .../literals/regexp/S7.8.5_A2.4_T2.js         | 62 +++++++------------
 41 files changed, 233 insertions(+), 205 deletions(-)
 rename test/{built-ins/RegExp/S15.10.2.10_A2.1_T3.js => annexB/RegExp-control-escape-russian-letter.js} (98%)
 rename test/{built-ins/RegExp/S15.10.2.13_A1_T16.js => annexB/RegExp-decimal-escape-class-range.js} (99%)
 rename test/{built-ins/RegExp/S15.10.2.9_A1_T4.js => annexB/RegExp-decimal-escape-not-capturing.js} (97%)
 create mode 100644 test/annexB/RegExp-leading-escape-BMP.js
 create mode 100644 test/annexB/RegExp-leading-escape.js
 create mode 100644 test/annexB/RegExp-trailing-escape-BMP.js
 create mode 100644 test/annexB/RegExp-trailing-escape.js
 rename test/{language/statements/try/12.14-2.js => annexB/catch-redeclared-var-statement-captured.js} (96%)
 rename test/{language/statements/try/12.14-1.js => annexB/catch-redeclared-var-statement.js} (96%)

diff --git a/test/built-ins/RegExp/S15.10.2.10_A2.1_T3.js b/test/annexB/RegExp-control-escape-russian-letter.js
similarity index 98%
rename from test/built-ins/RegExp/S15.10.2.10_A2.1_T3.js
rename to test/annexB/RegExp-control-escape-russian-letter.js
index 6602fc354f..33dd5fb05e 100644
--- a/test/built-ins/RegExp/S15.10.2.10_A2.1_T3.js
+++ b/test/annexB/RegExp-control-escape-russian-letter.js
@@ -4,6 +4,7 @@
 /*---
 info: "CharacterEscape :: c ControlLetter"
 es5id: 15.10.2.10_A2.1_T3
+es6id: B.1.4
 description: "ControlLetter :: RUSSIAN ALPHABET is incorrect"
 ---*/
 
diff --git a/test/built-ins/RegExp/S15.10.2.13_A1_T16.js b/test/annexB/RegExp-decimal-escape-class-range.js
similarity index 99%
rename from test/built-ins/RegExp/S15.10.2.13_A1_T16.js
rename to test/annexB/RegExp-decimal-escape-class-range.js
index 814023d365..a6646230f3 100644
--- a/test/built-ins/RegExp/S15.10.2.13_A1_T16.js
+++ b/test/annexB/RegExp-decimal-escape-class-range.js
@@ -7,6 +7,7 @@ info: >
     evaluates by evaluating ClassRanges to obtain a CharSet and returning
     that CharSet and the boolean false
 es5id: 15.10.2.13_A1_T16
+es6id: B.1.4
 description: >
     Execute /[\d][\12-\14]{1,}[^\d]/.exec("line1\n\n\n\n\nline2") and
     check results
diff --git a/test/built-ins/RegExp/S15.10.2.9_A1_T4.js b/test/annexB/RegExp-decimal-escape-not-capturing.js
similarity index 97%
rename from test/built-ins/RegExp/S15.10.2.9_A1_T4.js
rename to test/annexB/RegExp-decimal-escape-not-capturing.js
index fe7edd337b..219cf0b77d 100644
--- a/test/built-ins/RegExp/S15.10.2.9_A1_T4.js
+++ b/test/annexB/RegExp-decimal-escape-not-capturing.js
@@ -7,6 +7,7 @@ info: >
     matches the result of the nth set of capturing parentheses (see
     15.10.2.11)
 es5id: 15.10.2.9_A1_T4
+es6id: B.1.4
 description: >
     Execute /\b(\w+) \2\b/.test("do you listen the the band") and
     check results
diff --git a/test/annexB/RegExp-leading-escape-BMP.js b/test/annexB/RegExp-leading-escape-BMP.js
new file mode 100644
index 0000000000..76dc3e507b
--- /dev/null
+++ b/test/annexB/RegExp-leading-escape-BMP.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    RegularExpressionFirstChar :: BackslashSequence :: \NonTerminator,
+    RegularExpressionChars :: [empty], RegularExpressionFlags :: [empty]
+es5id: 7.8.5_A1.4_T2
+es6id: 11.8.5
+description: Complex test with eval, using syntax pattern
+---*/
+
+for (var cu = 0; cu <= 0xffff; ++cu) {
+  var Elimination =
+    ((cu === 0x002A) || (cu === 0x002F) || (cu === 0x005C) || (cu === 0x002B) ||
+     (cu === 0x003F) || (cu === 0x0028) || (cu === 0x0029) ||
+     (cu === 0x005B) || (cu === 0x005D) || (cu === 0x007B) || (cu === 0x007D));
+     /*
+          * \u002A     / \u002F     \ \u005C     + \u002B
+          ? \u003F     ( \u0028     ) \u0029
+          [ \u005B     ] \u005D     { \u007B     } \u007D
+     */
+  var LineTerminator = ((cu === 0x000A) || (cu === 0x000D) || (cu === 0x2028) || (cu === 0x2029));
+  if ((Elimination || LineTerminator ) === false) {
+    var xx = "\\" + String.fromCharCode(cu);
+    var pattern = eval("/" + xx + "/");
+    assert.sameValue(pattern.source, xx, "Code unit: " + cu.toString(16));
+  }
+}
diff --git a/test/annexB/RegExp-leading-escape.js b/test/annexB/RegExp-leading-escape.js
new file mode 100644
index 0000000000..07b98c6a65
--- /dev/null
+++ b/test/annexB/RegExp-leading-escape.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    RegularExpressionFirstChar :: BackslashSequence :: \NonTerminator,
+    RegularExpressionChars :: [empty], RegularExpressionFlags :: [empty]
+es5id: 7.8.5_A1.4_T1
+es6id: 11.8.5
+description: Check similar to (/\1/.source === "\\1")
+---*/
+
+assert.sameValue(/\1/.source, "\\1");
+assert.sameValue(/\a/.source, "\\a");
diff --git a/test/annexB/RegExp-trailing-escape-BMP.js b/test/annexB/RegExp-trailing-escape-BMP.js
new file mode 100644
index 0000000000..4adebb8e09
--- /dev/null
+++ b/test/annexB/RegExp-trailing-escape-BMP.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    RegularExpressionChar :: BackslashSequence :: \NonTerminator,
+    RegularExpressionFlags :: [empty]
+es5id: 7.8.5_A2.4_T2
+es6id: 11.8.5
+description: Complex test with eval, using syntax pattern
+---*/
+
+for (var cu = 0; cu <= 0xffff; ++cu) {
+  var Elimination =
+    ((cu === 0x002A) || (cu === 0x002F) || (cu === 0x005C) || (cu === 0x002B) ||
+     (cu === 0x003F) || (cu === 0x0028) || (cu === 0x0029) ||
+     (cu === 0x005B) || (cu === 0x005D) || (cu === 0x007B) || (cu === 0x007D));
+     /*
+          * \u002A     / \u002F     \ \u005C     + \u002B
+          ? \u003F     ( \u0028     ) \u0029
+          [ \u005B     ] \u005D     { \u007B     } \u007D
+     */
+  var LineTerminator = ((cu === 0x000A) || (cu === 0x000D) || (cu === 0x2028) || (cu === 0x2029));
+  if ((Elimination || LineTerminator ) === false) {
+    var xx = "a\\" + String.fromCharCode(cu);
+    var pattern = eval("/" + xx + "/");
+    assert.sameValue(pattern.source, xx, "Code unit: " + cu.toString(16));
+  }
+}
diff --git a/test/annexB/RegExp-trailing-escape.js b/test/annexB/RegExp-trailing-escape.js
new file mode 100644
index 0000000000..c7f2f1402d
--- /dev/null
+++ b/test/annexB/RegExp-trailing-escape.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: >
+    RegularExpressionChar :: BackslashSequence :: \NonTerminator,
+    RegularExpressionFlags :: [empty]
+es5id: 7.8.5_A2.4_T1
+es6id: 11.8.5
+description: Check similar to (/a\1/.source === "a\\1")
+---*/
+
+assert.sameValue(/a\1/.source, "a\\1");
+assert.sameValue(/a\a/.source, "a\\a");
diff --git a/test/language/statements/try/12.14-2.js b/test/annexB/catch-redeclared-var-statement-captured.js
similarity index 96%
rename from test/language/statements/try/12.14-2.js
rename to test/annexB/catch-redeclared-var-statement-captured.js
index 7ddd343aa0..3c14ebef3b 100644
--- a/test/language/statements/try/12.14-2.js
+++ b/test/annexB/catch-redeclared-var-statement-captured.js
@@ -3,10 +3,10 @@
 
 /*---
 es5id: 12.14-2
+es6id: B.3.5
 description: >
     catch doesn't change declaration scope - var initializer in catch
     with same name as catch parameter changes parameter
-features: [AnnexB]
 ---*/
 
   function capturedFoo() {return foo};
diff --git a/test/language/statements/try/12.14-1.js b/test/annexB/catch-redeclared-var-statement.js
similarity index 96%
rename from test/language/statements/try/12.14-1.js
rename to test/annexB/catch-redeclared-var-statement.js
index c7c8bf2f8c..d3a9f69af5 100644
--- a/test/language/statements/try/12.14-1.js
+++ b/test/annexB/catch-redeclared-var-statement.js
@@ -3,10 +3,10 @@
 
 /*---
 es5id: 12.14-1
+es6id: B.3.5
 description: >
     catch doesn't change declaration scope - var initializer in catch
     with same name as catch parameter changes parameter
-features: [AnnexB]
 ---*/
 
   foo = "prior to throw";
diff --git a/test/built-ins/Function/15.3.5.4_2-12gs.js b/test/built-ins/Function/15.3.5.4_2-12gs.js
index baa5ca6d2a..4b1fc53638 100644
--- a/test/built-ins/Function/15.3.5.4_2-12gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-12gs.js
@@ -7,6 +7,7 @@ description: >
     Strict mode - checking access to non-strict function caller from
     non-strict function (eval includes strict directive prologue)
 flags: [noStrict]
+features: [caller]
 ---*/
 
 eval("\"use strict\";\ngNonStrict();");
diff --git a/test/built-ins/Function/15.3.5.4_2-14gs.js b/test/built-ins/Function/15.3.5.4_2-14gs.js
index 6027e1f340..0df946d586 100644
--- a/test/built-ins/Function/15.3.5.4_2-14gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-14gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (indirect eval includes strict directive
     prologue)
 flags: [noStrict]
+features: [caller]
 ---*/
 
 var my_eval = eval;
diff --git a/test/built-ins/Function/15.3.5.4_2-75gs.js b/test/built-ins/Function/15.3.5.4_2-75gs.js
index 0de454da88..b39e30f70e 100644
--- a/test/built-ins/Function/15.3.5.4_2-75gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-75gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict function declaration)
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-76gs.js b/test/built-ins/Function/15.3.5.4_2-76gs.js
index 618b8e2d28..9da118714e 100644
--- a/test/built-ins/Function/15.3.5.4_2-76gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-76gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict eval)
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-77gs.js b/test/built-ins/Function/15.3.5.4_2-77gs.js
index f41674dace..572e382053 100644
--- a/test/built-ins/Function/15.3.5.4_2-77gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-77gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function constructor)
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() {return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-78gs.js b/test/built-ins/Function/15.3.5.4_2-78gs.js
index bea139fc48..80aa51604e 100644
--- a/test/built-ins/Function/15.3.5.4_2-78gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-78gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict new'ed Function constructor)
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-79gs.js b/test/built-ins/Function/15.3.5.4_2-79gs.js
index bd64d799cd..e0814d0d23 100644
--- a/test/built-ins/Function/15.3.5.4_2-79gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-79gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.apply())
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-80gs.js b/test/built-ins/Function/15.3.5.4_2-80gs.js
index 9e6482fbfc..aa03f3ec21 100644
--- a/test/built-ins/Function/15.3.5.4_2-80gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-80gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.apply(null))
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-81gs.js b/test/built-ins/Function/15.3.5.4_2-81gs.js
index ecc3234b0e..e3f028da4c 100644
--- a/test/built-ins/Function/15.3.5.4_2-81gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-81gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.apply(undefined))
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-82gs.js b/test/built-ins/Function/15.3.5.4_2-82gs.js
index 55a7da5a09..7a78c1726c 100644
--- a/test/built-ins/Function/15.3.5.4_2-82gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-82gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.apply(someObject))
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-83gs.js b/test/built-ins/Function/15.3.5.4_2-83gs.js
index 70a8b6ff80..99d68c861a 100644
--- a/test/built-ins/Function/15.3.5.4_2-83gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-83gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.apply(globalObject))
 flags: [noStrict]
+features: [caller]
 includes: [fnGlobalObject.js]
 ---*/
 
diff --git a/test/built-ins/Function/15.3.5.4_2-84gs.js b/test/built-ins/Function/15.3.5.4_2-84gs.js
index b91a85b244..ecc1e152dc 100644
--- a/test/built-ins/Function/15.3.5.4_2-84gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-84gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.call())
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-85gs.js b/test/built-ins/Function/15.3.5.4_2-85gs.js
index 65888cd8b1..ff899ce7c7 100644
--- a/test/built-ins/Function/15.3.5.4_2-85gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-85gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.call(null))
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-86gs.js b/test/built-ins/Function/15.3.5.4_2-86gs.js
index a0a8f9d464..c617f4eb73 100644
--- a/test/built-ins/Function/15.3.5.4_2-86gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-86gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.call(undefined))
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-87gs.js b/test/built-ins/Function/15.3.5.4_2-87gs.js
index ff206e3d1f..c2ba651420 100644
--- a/test/built-ins/Function/15.3.5.4_2-87gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-87gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.call(someObject))
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-88gs.js b/test/built-ins/Function/15.3.5.4_2-88gs.js
index caf238e228..f2506fd4f5 100644
--- a/test/built-ins/Function/15.3.5.4_2-88gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-88gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.call(globalObject))
 flags: [noStrict]
+features: [caller]
 includes: [fnGlobalObject.js]
 ---*/
 
diff --git a/test/built-ins/Function/15.3.5.4_2-89gs.js b/test/built-ins/Function/15.3.5.4_2-89gs.js
index ed36985817..ec574b3a7d 100644
--- a/test/built-ins/Function/15.3.5.4_2-89gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-89gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.bind()())
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-90gs.js b/test/built-ins/Function/15.3.5.4_2-90gs.js
index f90d05026b..bbab075d19 100644
--- a/test/built-ins/Function/15.3.5.4_2-90gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-90gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.bind(null)())
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-91gs.js b/test/built-ins/Function/15.3.5.4_2-91gs.js
index e35b5d4b6b..1049047f04 100644
--- a/test/built-ins/Function/15.3.5.4_2-91gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-91gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.bind(undefined)())
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-92gs.js b/test/built-ins/Function/15.3.5.4_2-92gs.js
index 9cdad5bdd7..8ff2abc398 100644
--- a/test/built-ins/Function/15.3.5.4_2-92gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-92gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.bind(someObject)())
 flags: [noStrict]
+features: [caller]
 ---*/
 
 function f() { return gNonStrict();};
diff --git a/test/built-ins/Function/15.3.5.4_2-93gs.js b/test/built-ins/Function/15.3.5.4_2-93gs.js
index 7a1da90b55..78d9e70393 100644
--- a/test/built-ins/Function/15.3.5.4_2-93gs.js
+++ b/test/built-ins/Function/15.3.5.4_2-93gs.js
@@ -8,6 +8,7 @@ description: >
     non-strict function (non-strict function declaration called by
     strict Function.prototype.bind(globalObject)())
 flags: [noStrict]
+features: [caller]
 includes: [fnGlobalObject.js]
 ---*/
 
diff --git a/test/built-ins/RegExp/S15.10.2.10_A5.1_T1.js b/test/built-ins/RegExp/S15.10.2.10_A5.1_T1.js
index 2d85e1670d..8805e44e56 100644
--- a/test/built-ins/RegExp/S15.10.2.10_A5.1_T1.js
+++ b/test/built-ins/RegExp/S15.10.2.10_A5.1_T1.js
@@ -11,12 +11,8 @@ description: "Tested string is \"~`!@#$%^&*()-+={[}]|\\\\:;'<,>./?\" + '\"'"
 
 //CHECK#1
 var non_ident = "~`!@#$%^&*()-+={[}]|\\:;'<,>./?" + '"';
-var k = -1;
-do {
-   k++;
-   var arr = new RegExp("\\" + non_ident[k], "g").exec(non_ident);   
-} while ((arr !== null) && (arr[0] === non_ident[k]))
-
-if (non_ident.length !== k) {
-   $ERROR('#1: IdentityEscapeSequence :: SourceCharacter but not IdentifierPart');
+for (var k = 0; k < non_ident.length; ++k) {
+  var arr = new RegExp("\\" + non_ident[k], "g").exec(non_ident);
+  assert.notSameValue(null, "No match for character: " + non_ident[k]);
+  assert.sameValue(arr[0], non_ident[k]);
 }
diff --git a/test/built-ins/RegExp/S15.10.2.6_A4_T7.js b/test/built-ins/RegExp/S15.10.2.6_A4_T7.js
index 8517050480..26410af86a 100644
--- a/test/built-ins/RegExp/S15.10.2.6_A4_T7.js
+++ b/test/built-ins/RegExp/S15.10.2.6_A4_T7.js
@@ -7,13 +7,34 @@ info: >
     AssertionTester closure that takes a State argument x and performs the ...
 es5id: 15.10.2.6_A4_T7
 description: >
-    Execute /\B\[^z]{4}\B/.test("devil arise\tforzzx\nevils") and
+    Execute /\B[^z]{4}\B/.exec("devil arise\tforzzx\nevils") and
     check results
 ---*/
 
-var __executed = /\B\[^z]{4}\B/.test("devil arise\tforzzx\nevils");
+var __executed = /\B[^z]{4}\B/.exec("devil arise\tforzzx\nevils");
+
+var __expected = ["il a"];
+__expected.index = 3;
+__expected.input = "devil arise\tforzzx\nevils";
 
 //CHECK#1
-if (__executed) {
-	$ERROR('#1: /\\B\\[^z]{4}\\B/.test("devil arise\\tforzzx\\nevils") === false');
+if (__executed.length !== __expected.length) {
+	$ERROR('#1: __executed = /\B[^z]{4}\B/.exec("devil arise\\tforzzx\\nevils"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length);
+}
+
+//CHECK#2
+if (__executed.index !== __expected.index) {
+	$ERROR('#2: __executed = /\B[^z]{4}\B/.exec("devil arise\\tforzzx\\nevils"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index);
+}
+
+//CHECK#3
+if (__executed.input !== __expected.input) {
+	$ERROR('#3: __executed = /\B[^z]{4}\B/.exec("devil arise\\tforzzx\\nevils"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input);
+}
+
+//CHECK#4
+for(var index=0; index<__expected.length; index++) {
+	if (__executed[index] !== __expected[index]) {
+		$ERROR('#4: __executed = /\B[^z]{4}\B/.exec("devil arise\\tforzzx\\nevils"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]);
+	}
 }
diff --git a/test/built-ins/RegExp/S15.10.2_A1_T1.js b/test/built-ins/RegExp/S15.10.2_A1_T1.js
index b2a8708926..9ebce76ca2 100644
--- a/test/built-ins/RegExp/S15.10.2_A1_T1.js
+++ b/test/built-ins/RegExp/S15.10.2_A1_T1.js
@@ -20,20 +20,20 @@ var TextSE = "[^<]+";
 var UntilHyphen = "[^-]*-";
 var Until2Hyphens = UntilHyphen + "([^-]" + UntilHyphen + ")*-";
 var CommentCE = Until2Hyphens + ">?";
-var UntilRSBs = "[^]]*]([^]]+])*]+";
-var CDATA_CE = UntilRSBs + "([^]>]" + UntilRSBs + ")*>";
+var UntilRSBs = "[^\\]]*\\]([^\\]]+\\])*\\]+";
+var CDATA_CE = UntilRSBs + "([^\\]>]" + UntilRSBs + ")*>";
 var S = "[ \\n\\t\\r]+";
 var NameStrt = "[A-Za-z_:]|[^\\x00-\\x7F]";
 var NameChar = "[A-Za-z0-9_:.-]|[^\\x00-\\x7F]";
 var Name = "(" + NameStrt + ")(" + NameChar + ")*";
 var QuoteSE = '"[^"]' + "*" + '"' + "|'[^']*'";
 var DT_IdentSE = S + Name + "(" + S + "(" + Name + "|" + QuoteSE + "))*";
-var MarkupDeclCE = "([^]\"'><]+|" + QuoteSE + ")*>";
+var MarkupDeclCE = "([^\\]\"'><]+|" + QuoteSE + ")*>";
 var S1 = "[\\n\\r\\t ]";
 var UntilQMs = "[^?]*\\?+";
 var PI_Tail = "\\?>|" + S1 + UntilQMs + "([^>?]" + UntilQMs + ")*>";
 var DT_ItemSE = "<(!(--" + Until2Hyphens + ">|[^-]" + MarkupDeclCE + ")|\\?" + Name + "(" + PI_Tail + "))|%" + Name + ";|" + S;
-var DocTypeCE = DT_IdentSE + "(" + S + ")?(\\[(" + DT_ItemSE + ")*](" + S + ")?)?>?";
+var DocTypeCE = DT_IdentSE + "(" + S + ")?(\\[(" + DT_ItemSE + ")*\\](" + S + ")?)?>?";
 var DeclCE = "--(" + CommentCE + ")?|\\[CDATA\\[(" + CDATA_CE + ")?|DOCTYPE(" + DocTypeCE + ")?";
 var PI_CE = Name + "(" + PI_Tail + ")?";
 var EndTagCE = Name + "(" + S + ")?>?";
diff --git a/test/language/arguments-object/10.6-13-a-2.js b/test/language/arguments-object/10.6-13-a-2.js
index da803ecffb..c80a20d8bd 100644
--- a/test/language/arguments-object/10.6-13-a-2.js
+++ b/test/language/arguments-object/10.6-13-a-2.js
@@ -5,6 +5,7 @@
 es5id: 10.6-13-a-2
 description: A direct call to arguments.callee.caller should work
 flags: [noStrict]
+features: [caller]
 ---*/
 
     var called = false;
diff --git a/test/language/arguments-object/10.6-13-a-3.js b/test/language/arguments-object/10.6-13-a-3.js
index 4ed593ea67..af87495b5d 100644
--- a/test/language/arguments-object/10.6-13-a-3.js
+++ b/test/language/arguments-object/10.6-13-a-3.js
@@ -5,6 +5,7 @@
 es5id: 10.6-13-a-3
 description: An indirect call to arguments.callee.caller should work
 flags: [noStrict]
+features: [caller]
 ---*/
 
     var called = false;
diff --git a/test/language/literals/regexp/S7.8.5_A1.1_T2.js b/test/language/literals/regexp/S7.8.5_A1.1_T2.js
index c4b9db604b..0fce03b986 100644
--- a/test/language/literals/regexp/S7.8.5_A1.1_T2.js
+++ b/test/language/literals/regexp/S7.8.5_A1.1_T2.js
@@ -9,46 +9,20 @@ es5id: 7.8.5_A1.1_T2
 description: Complex test with eval, using syntax pattern
 ---*/
 
-//CHECK
-var errorCount = 0;
-var count = 0;
-var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
-for (var i1 = 0; i1 < 16; i1++) {
-  for (var i2 = 0; i2 < 16; i2++) {
-    for (var i3 = 0; i3 < 16; i3++) {
-      for (var i4 = 0; i4 < 16; i4++) {
-        try {
-          var uu = hex[i1] + hex[i2] + hex[i3] + hex[i4];
-	      var Elimination =
-          ((uu === "002A") || (uu === "002F") || (uu === "005C") || (uu === "002B") ||
-           (uu === "003F") || (uu === "0028") || (uu === "0029") ||
-           (uu === "005B") || (uu === "005D") || (uu === "007B") || (uu === "007D"));
-           /*
-                * \u002A     / \u002F     \ \u005C     + \u002B
-                ? \u003F     ( \u0028     ) \u0029
-                [ \u005B     ] \u005D     { \u007B     } \u007D
-           */
-          var LineTerminator = ((uu === "000A") || (uu === "000D") || (uu === "2028") || (uu === "2029"));
-          if ((Elimination || LineTerminator ) === false) {
-            var xx = String.fromCharCode("0x" + uu);
-            var pattern = eval("/" + xx + "/");
-            if (pattern.source !== xx) {
-              $ERROR('#' + uu + ' ');
-              errorCount++;
-            }
-          } else {
-            count--;
-          }
-        } catch (e) {
-          $ERROR('#' + uu + ' ');
-          errorCount++;
-        }
-        count++;
-      }
-    }
+for (var cu = 0; cu <= 0xffff; ++cu) {
+  var Elimination =
+    ((cu === 0x002A) || (cu === 0x002F) || (cu === 0x005C) || (cu === 0x002B) ||
+     (cu === 0x003F) || (cu === 0x0028) || (cu === 0x0029) ||
+     (cu === 0x005B) || (cu === 0x005D) || (cu === 0x007B) || (cu === 0x007D));
+     /*
+          * \u002A     / \u002F     \ \u005C     + \u002B
+          ? \u003F     ( \u0028     ) \u0029
+          [ \u005B     ] \u005D     { \u007B     } \u007D
+     */
+  var LineTerminator = ((cu === 0x000A) || (cu === 0x000D) || (cu === 0x2028) || (cu === 0x2029));
+  if ((Elimination || LineTerminator ) === false) {
+    var xx = String.fromCharCode(cu);
+    var pattern = eval("/" + xx + "/");
+    assert.sameValue(pattern.source, xx, "Code unit: " + cu.toString(16));
   }
 }
-
-if (errorCount > 0) {
-  $ERROR('Total error: ' + errorCount + ' bad Regular Expression First Char in ' + count);
-}
diff --git a/test/language/literals/regexp/S7.8.5_A1.4_T1.js b/test/language/literals/regexp/S7.8.5_A1.4_T1.js
index ae824ab027..c4df94cd36 100644
--- a/test/language/literals/regexp/S7.8.5_A1.4_T1.js
+++ b/test/language/literals/regexp/S7.8.5_A1.4_T1.js
@@ -6,25 +6,15 @@ info: >
     RegularExpressionFirstChar :: BackslashSequence :: \NonTerminator,
     RegularExpressionChars :: [empty], RegularExpressionFlags :: [empty]
 es5id: 7.8.5_A1.4_T1
-description: Check similar to (/\1/.source === "\\1")
+description: Check similar to (/\;/.source === "\\;")
 ---*/
 
 //CHECK#1
-if (/\1/.source !== "\\1") {
-  $ERROR('#1: /\\1/');
-}   
-
-//CHECK#2
-if (/\a/.source !== "\\a") {
-  $ERROR('#2: /\\a/');
-}
-
-//CHECK#3
 if (/\;/.source !== "\\;") {
-  $ERROR('#3: /\\;/');
+  $ERROR('#1: /\\;/');
 }
 
-//CHECK#4
+//CHECK#2
 if (/\ /.source !== "\\ ") {
-  $ERROR('#4: /\\ /');
+  $ERROR('#2: /\\ /');
 }
diff --git a/test/language/literals/regexp/S7.8.5_A1.4_T2.js b/test/language/literals/regexp/S7.8.5_A1.4_T2.js
index 1b4ceda621..7fbab7bc2a 100644
--- a/test/language/literals/regexp/S7.8.5_A1.4_T2.js
+++ b/test/language/literals/regexp/S7.8.5_A1.4_T2.js
@@ -9,46 +9,32 @@ es5id: 7.8.5_A1.4_T2
 description: Complex test with eval, using syntax pattern
 ---*/
 
-//CHECK
-var errorCount = 0;
-var count = 0;
-var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
-for (var i1 = 0; i1 < 16; i1++) {
-  for (var i2 = 0; i2 < 16; i2++) {
-    for (var i3 = 0; i3 < 16; i3++) {
-      for (var i4 = 0; i4 < 16; i4++) {
+for (var cu = 0; cu <= 0xffff; ++cu) {
+  var Elimination =
+    ((cu === 0x002A) || (cu === 0x002F) || (cu === 0x005C) || (cu === 0x002B) ||
+     (cu === 0x003F) || (cu === 0x0028) || (cu === 0x0029) ||
+     (cu === 0x005B) || (cu === 0x005D) || (cu === 0x007B) || (cu === 0x007D));
+     /*
+          * \u002A     / \u002F     \ \u005C     + \u002B
+          ? \u003F     ( \u0028     ) \u0029
+          [ \u005B     ] \u005D     { \u007B     } \u007D
+     */
+  var LineTerminator = ((cu === 0x000A) || (cu === 0x000D) || (cu === 0x2028) || (cu === 0x2029));
+  if ((Elimination || LineTerminator ) === false) {
+    var xx = "\\" + String.fromCharCode(cu);
+    try {
+      var pattern = eval("/" + xx + "/");
+    } catch (e) {
+      var identifierPartNotUnicodeIDContinue = ((cu === 0x0024) || (cu === 0x200C) || (cu === 0x200D));
+      if (e instanceof SyntaxError && !identifierPartNotUnicodeIDContinue) {
+        // Use eval with var-declaration to check if `cu` is in UnicodeIDContinue.
         try {
-          var uu = hex[i1] + hex[i2] + hex[i3] + hex[i4];
-	      var Elimination =
-          ((uu === "002A") || (uu === "002F") || (uu === "005C") || (uu === "002B") ||
-           (uu === "003F") || (uu === "0028") || (uu === "0029") ||
-           (uu === "005B") || (uu === "005D") || (uu === "007B") || (uu === "007D"));
-           /*
-                * \u002A     / \u002F     \ \u005C     + \u002B
-                ? \u003F     ( \u0028     ) \u0029
-                [ \u005B     ] \u005D     { \u007B     } \u007D
-           */
-          var LineTerminator = ((uu === "000A") || (uu === "000D") || (uu === "2028") || (uu === "2029"));
-          if ((Elimination || LineTerminator ) === false) {
-            var xx = "\\" + String.fromCharCode("0x" + uu);
-            var pattern = eval("/" + xx + "/");
-            if (pattern.source !== xx) {
-              $ERROR('#' + uu + ' ');
-              errorCount++;
-            }
-          } else {
-            count--;
-          }
-        } catch (e) {
-          $ERROR('#' + uu + ' ');
-          errorCount++;
-        }
-        count++;
+          eval("var _" + String.fromCharCode(cu));
+          continue;
+        } catch (ignore) { }
       }
+      throw e;
     }
+    assert.sameValue(pattern.source, xx, "Code unit: " + cu.toString(16));
   }
 }
-
-if (errorCount > 0) {
-  $ERROR('Total error: ' + errorCount + ' bad Regular Expression First Char in ' + count);
-}
diff --git a/test/language/literals/regexp/S7.8.5_A2.1_T2.js b/test/language/literals/regexp/S7.8.5_A2.1_T2.js
index 216918c58d..badc5a0b7d 100644
--- a/test/language/literals/regexp/S7.8.5_A2.1_T2.js
+++ b/test/language/literals/regexp/S7.8.5_A2.1_T2.js
@@ -9,47 +9,20 @@ es5id: 7.8.5_A2.1_T2
 description: Complex test with eval, using syntax pattern
 ---*/
 
-//CHECK
-var errorCount = 0;
-var count = 0;
-var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
-for (var i1 = 0; i1 < 16; i1++) {
-  for (var i2 = 0; i2 < 16; i2++) {
-    for (var i3 = 0; i3 < 16; i3++) {
-      for (var i4 = 0; i4 < 16; i4++) {
-        try {
-          var uu = hex[i1] + hex[i2] + hex[i3] + hex[i4];
-	      var Elimination =
-          ((uu === "002A") || (uu === "002F") || (uu === "005C") || (uu === "002B") ||
-           (uu === "003F") || (uu === "0028") || (uu === "0029") ||
-           (uu === "005B") || (uu === "005D") || (uu === "007B") || (uu === "007D"));
-           /*
-                * \u002A     / \u002F     \ \u005C     + \u002B
-                ? \u003F     ( \u0028     ) \u0029
-                [ \u005B     ] \u005D     { \u007B     } \u007D
-           */
-          var LineTerminator = ((uu === "000A") || (uu === "000D") || (uu === "2028") || (uu === "2029"));
-          if ((Elimination || LineTerminator ) === false) {
-            var xx = "nnnn" + String.fromCharCode("0x" + uu);
-            var pattern = eval("/" + xx + "/");
-            if (pattern.source !== xx) {
-              $ERROR('#' + uu + ' ');
-              errorCount++;
-            }
-
-          } else {
-            count--;
-          }
-        } catch (e) {
-          $ERROR('#' + uu + ' ');
-          errorCount++;
-        }
-        count++;
-      }
-    }
+for (var cu = 0; cu <= 0xffff; ++cu) {
+  var Elimination =
+    ((cu === 0x002A) || (cu === 0x002F) || (cu === 0x005C) || (cu === 0x002B) ||
+     (cu === 0x003F) || (cu === 0x0028) || (cu === 0x0029) ||
+     (cu === 0x005B) || (cu === 0x005D) || (cu === 0x007B) || (cu === 0x007D));
+     /*
+          * \u002A     / \u002F     \ \u005C     + \u002B
+          ? \u003F     ( \u0028     ) \u0029
+          [ \u005B     ] \u005D     { \u007B     } \u007D
+     */
+  var LineTerminator = ((cu === 0x000A) || (cu === 0x000D) || (cu === 0x2028) || (cu === 0x2029));
+  if ((Elimination || LineTerminator ) === false) {
+    var xx = "nnnn" + String.fromCharCode(cu);
+    var pattern = eval("/" + xx + "/");
+    assert.sameValue(pattern.source, xx, "Code unit: " + cu.toString(16));
   }
 }
-
-if (errorCount > 0) {
-  $ERROR('Total error: ' + errorCount + ' bad Regular Expression First Char in ' + count);
-}
diff --git a/test/language/literals/regexp/S7.8.5_A2.4_T1.js b/test/language/literals/regexp/S7.8.5_A2.4_T1.js
index 72f4ea5467..10665d439b 100644
--- a/test/language/literals/regexp/S7.8.5_A2.4_T1.js
+++ b/test/language/literals/regexp/S7.8.5_A2.4_T1.js
@@ -6,25 +6,15 @@ info: >
     RegularExpressionChar :: BackslashSequence :: \NonTerminator,
     RegularExpressionFlags :: [empty]
 es5id: 7.8.5_A2.4_T1
-description: Check similar to (/a\1/.source === "a\\1")
+description: Check similar to (/,\;/.source === ",\\;")
 ---*/
 
 //CHECK#1
-if (/a\1/.source !== "a\\1") {
-  $ERROR('#1: /a\\1/');
-}   
-
-//CHECK#2
-if (/a\a/.source !== "a\\a") {
-  $ERROR('#2: /a\\a/');
-}
-
-//CHECK#3
 if (/,\;/.source !== ",\\;") {
-  $ERROR('#3: /,\\;/');
+  $ERROR('#1: /,\\;/');
 }
 
-//CHECK#4
+//CHECK#2
 if (/ \ /.source !== " \\ ") {
-  $ERROR('#4: / \\ /');
+  $ERROR('#2: / \\ /');
 }
diff --git a/test/language/literals/regexp/S7.8.5_A2.4_T2.js b/test/language/literals/regexp/S7.8.5_A2.4_T2.js
index b64ded43f0..6f758f767b 100644
--- a/test/language/literals/regexp/S7.8.5_A2.4_T2.js
+++ b/test/language/literals/regexp/S7.8.5_A2.4_T2.js
@@ -9,46 +9,32 @@ es5id: 7.8.5_A2.4_T2
 description: Complex test with eval, using syntax pattern
 ---*/
 
-//CHECK
-var errorCount = 0;
-var count = 0;
-var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
-for (var i1 = 0; i1 < 16; i1++) {
-  for (var i2 = 0; i2 < 16; i2++) {
-    for (var i3 = 0; i3 < 16; i3++) {
-      for (var i4 = 0; i4 < 16; i4++) {
+for (var cu = 0; cu <= 0xffff; ++cu) {
+  var Elimination =
+    ((cu === 0x002A) || (cu === 0x002F) || (cu === 0x005C) || (cu === 0x002B) ||
+     (cu === 0x003F) || (cu === 0x0028) || (cu === 0x0029) ||
+     (cu === 0x005B) || (cu === 0x005D) || (cu === 0x007B) || (cu === 0x007D));
+     /*
+          * \u002A     / \u002F     \ \u005C     + \u002B
+          ? \u003F     ( \u0028     ) \u0029
+          [ \u005B     ] \u005D     { \u007B     } \u007D
+     */
+  var LineTerminator = ((cu === 0x000A) || (cu === 0x000D) || (cu === 0x2028) || (cu === 0x2029));
+  if ((Elimination || LineTerminator ) === false) {
+    var xx = "a\\" + String.fromCharCode(cu);
+    try {
+      var pattern = eval("/" + xx + "/");
+    } catch (e) {
+      var identifierPartNotUnicodeIDContinue = ((cu === 0x0024) || (cu === 0x200C) || (cu === 0x200D));
+      if (e instanceof SyntaxError && !identifierPartNotUnicodeIDContinue) {
+        // Use eval with var-declaration to check if `cu` is in UnicodeIDContinue.
         try {
-          var uu = hex[i1] + hex[i2] + hex[i3] + hex[i4];
-	      var Elimination =
-          ((uu === "002A") || (uu === "002F") || (uu === "005C") || (uu === "002B") ||
-           (uu === "003F") || (uu === "0028") || (uu === "0029") ||
-           (uu === "005B") || (uu === "005D") || (uu === "007B") || (uu === "007D"));
-           /*
-                * \u002A     / \u002F     \ \u005C     + \u002B
-                ? \u003F     ( \u0028     ) \u0029
-                [ \u005B     ] \u005D     { \u007B     } \u007D
-           */
-          var LineTerminator = ((uu === "000A") || (uu === "000D") || (uu === "2028") || (uu === "2029"));
-          if ((Elimination || LineTerminator ) === false) {
-            var xx = "a\\" + String.fromCharCode("0x" + uu);
-            var pattern = eval("/" + xx + "/");
-            if (pattern.source !== xx) {
-              $ERROR('#' + uu + ' ');
-              errorCount++;
-            }
-          } else {
-            count--;
-          }
-        } catch (e) {
-          $ERROR('#' + uu + ' ');
-          errorCount++;
-        }
-        count++;
+          eval("var _" + String.fromCharCode(cu));
+          continue;
+        } catch (ignore) { }
       }
+      throw e;
     }
+    assert.sameValue(pattern.source, xx, "Code unit: " + cu.toString(16));
   }
 }
-
-if (errorCount > 0) {
-  $ERROR('Total error: ' + errorCount + ' bad Regular Expression First Char in ' + count);
-}
-- 
GitLab