Bug 1219757 - Part 1: Remove RegExp.multiline accessor. r=till
authorTooru Fujisawa <arai_a@mac.com>
Wed, 25 Nov 2015 22:38:04 +0900
changeset 289989 e5ae8475e40e2dd74033f3163e42811e1fc6de88
parent 289988 75826602a7885b740b13a02281f0e6462345baa0
child 289990 c158afbc85abaa8352e8341fd197023073157d45
push id30112
push usercbook@mozilla.com
push dateWed, 23 Mar 2016 15:25:32 +0000
treeherdermozilla-central@6202ade0e6d6 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerstill
bugs1219757
milestone48.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1219757 - Part 1: Remove RegExp.multiline accessor. r=till
js/src/builtin/RegExp.cpp
js/src/jit-test/tests/basic/bug673766.js
js/src/jit-test/tests/basic/regexp-multiline.js
js/src/tests/js1_2/regexp/RegExp_multiline.js
js/src/tests/js1_2/regexp/RegExp_multiline_as_array.js
js/src/tests/js1_2/regexp/beginLine.js
js/src/tests/js1_2/regexp/endLine.js
js/src/tests/js1_5/Regress/regress-418504.js
js/xpconnect/tests/chrome/test_xrayToJS.xul
--- a/js/src/builtin/RegExp.cpp
+++ b/js/src/builtin/RegExp.cpp
@@ -624,17 +624,16 @@ const JSFunctionSpec js::regexp_methods[
     return true
 
 /*
  * RegExp static properties.
  *
  * RegExp class static properties and their Perl counterparts:
  *
  *  RegExp.input                $_
- *  RegExp.multiline            $*
  *  RegExp.lastMatch            $&
  *  RegExp.lastParen            $+
  *  RegExp.leftContext          $`
  *  RegExp.rightContext         $'
  */
 
 #define DEFINE_STATIC_GETTER(name, code)                                        \
     static bool                                                                 \
@@ -643,18 +642,16 @@ const JSFunctionSpec js::regexp_methods[
         CallArgs args = CallArgsFromVp(argc, vp);                               \
         RegExpStatics* res = cx->global()->getRegExpStatics(cx);                \
         if (!res)                                                               \
             return false;                                                       \
         code;                                                                   \
     }
 
 DEFINE_STATIC_GETTER(static_input_getter,        return res->createPendingInput(cx, args.rval()))
-DEFINE_STATIC_GETTER(static_multiline_getter,    args.rval().setBoolean(res->multiline());
-                                                 return true)
 DEFINE_STATIC_GETTER(static_lastMatch_getter,    return res->createLastMatch(cx, args.rval()))
 DEFINE_STATIC_GETTER(static_lastParen_getter,    return res->createLastParen(cx, args.rval()))
 DEFINE_STATIC_GETTER(static_leftContext_getter,  return res->createLeftContext(cx, args.rval()))
 DEFINE_STATIC_GETTER(static_rightContext_getter, return res->createRightContext(cx, args.rval()))
 
 DEFINE_STATIC_GETTER(static_paren1_getter,       STATIC_PAREN_GETTER_CODE(1))
 DEFINE_STATIC_GETTER(static_paren2_getter,       STATIC_PAREN_GETTER_CODE(2))
 DEFINE_STATIC_GETTER(static_paren3_getter,       STATIC_PAREN_GETTER_CODE(3))
@@ -688,50 +685,33 @@ static_input_setter(JSContext* cx, unsig
     if (!str)
         return false;
 
     res->setPendingInput(str);
     args.rval().setString(str);
     return true;
 }
 
-static bool
-static_multiline_setter(JSContext* cx, unsigned argc, Value* vp)
-{
-    CallArgs args = CallArgsFromVp(argc, vp);
-    RegExpStatics* res = cx->global()->getRegExpStatics(cx);
-    if (!res)
-        return false;
-
-    bool b = ToBoolean(args.get(0));
-    res->setMultiline(cx, b);
-    args.rval().setBoolean(b);
-    return true;
-}
-
 const JSPropertySpec js::regexp_static_props[] = {
     JS_PSGS("input", static_input_getter, static_input_setter,
             JSPROP_PERMANENT | JSPROP_ENUMERATE),
-    JS_PSGS("multiline", static_multiline_getter, static_multiline_setter,
-            JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("lastMatch", static_lastMatch_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("lastParen", static_lastParen_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("leftContext",  static_leftContext_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("rightContext", static_rightContext_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("$1", static_paren1_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("$2", static_paren2_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("$3", static_paren3_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("$4", static_paren4_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("$5", static_paren5_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("$6", static_paren6_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("$7", static_paren7_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("$8", static_paren8_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSG("$9", static_paren9_getter, JSPROP_PERMANENT | JSPROP_ENUMERATE),
     JS_PSGS("$_", static_input_getter, static_input_setter, JSPROP_PERMANENT),
-    JS_PSGS("$*", static_multiline_getter, static_multiline_setter, JSPROP_PERMANENT),
     JS_PSG("$&", static_lastMatch_getter, JSPROP_PERMANENT),
     JS_PSG("$+", static_lastParen_getter, JSPROP_PERMANENT),
     JS_PSG("$`", static_leftContext_getter, JSPROP_PERMANENT),
     JS_PSG("$'", static_rightContext_getter, JSPROP_PERMANENT),
     JS_PS_END
 };
 
 JSObject*
--- a/js/src/jit-test/tests/basic/bug673766.js
+++ b/js/src/jit-test/tests/basic/bug673766.js
@@ -8,13 +8,13 @@ function reportCompare(expected, actual,
 var actual = '';
 var expect = '';
 for (var i = 0; i < 2; ++i) reportCompare(expect, actual, ': 2');
 try {
     ({
         valueOf: gc
     } - [])
 } catch (prop) {}
-function addThis() reportCompare(expect, actual, 'RegExp.multiline = 17');
+function addThis() reportCompare(expect, actual, 'ok');
 Object.defineProperty(Object.prototype, "name", {
     set: function (newValue) {}
 });
 addThis()
deleted file mode 100644
--- a/js/src/jit-test/tests/basic/regexp-multiline.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// visibility of updates to RegExp.multiline
-
-function foo(value) {
-  for (var i = 0; i < 50; i++) {
-    var re = /erwe/;
-    assertEq(re.multiline, value);
-  }
-}
-
-foo(false);
-RegExp.multiline = true;
-foo(true);
deleted file mode 100644
--- a/js/src/tests/js1_2/regexp/RegExp_multiline.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- 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/. */
-
-
-/**
-   Filename:     RegExp_multiline.js
-   Description:  'Tests RegExps multiline property'
-
-   Author:       Nick Lerissa
-   Date:         March 12, 1998
-*/
-
-var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
-var VERSION = 'no version';
-startTest();
-var TITLE   = 'RegExp: multiline';
-
-writeHeaderToLog('Executing script: RegExp_multiline.js');
-writeHeaderToLog( SECTION + " "+ TITLE);
-
-// First we do a series of tests with RegExp.multiline set to false (default value)
-// Following this we do the same tests with RegExp.multiline set true(**).
-// RegExp.multiline
-new TestCase ( SECTION, "RegExp.multiline",
-	       false, RegExp.multiline);
-
-// (multiline == false) '123\n456'.match(/^4../)
-new TestCase ( SECTION, "(multiline == false) '123\\n456'.match(/^4../)",
-	       null, '123\n456'.match(/^4../));
-
-// (multiline == false) 'a11\na22\na23\na24'.match(/^a../g)
-new TestCase ( SECTION, "(multiline == false) 'a11\\na22\\na23\\na24'.match(/^a../g)",
-	       String(['a11']), String('a11\na22\na23\na24'.match(/^a../g)));
-
-// (multiline == false) 'a11\na22'.match(/^.+^./)
-new TestCase ( SECTION, "(multiline == false) 'a11\na22'.match(/^.+^./)",
-	       null, 'a11\na22'.match(/^.+^./));
-
-// (multiline == false) '123\n456'.match(/.3$/)
-new TestCase ( SECTION, "(multiline == false) '123\\n456'.match(/.3$/)",
-	       null, '123\n456'.match(/.3$/));
-
-// (multiline == false) 'a11\na22\na23\na24'.match(/a..$/g)
-new TestCase ( SECTION, "(multiline == false) 'a11\\na22\\na23\\na24'.match(/a..$/g)",
-	       String(['a24']), String('a11\na22\na23\na24'.match(/a..$/g)));
-
-// (multiline == false) 'abc\ndef'.match(/c$...$/)
-new TestCase ( SECTION, "(multiline == false) 'abc\ndef'.match(/c$...$/)",
-	       null, 'abc\ndef'.match(/c$...$/));
-
-// (multiline == false) 'a11\na22\na23\na24'.match(new RegExp('a..$','g'))
-new TestCase ( SECTION, "(multiline == false) 'a11\\na22\\na23\\na24'.match(new RegExp('a..$','g'))",
-	       String(['a24']), String('a11\na22\na23\na24'.match(new RegExp('a..$','g'))));
-
-// (multiline == false) 'abc\ndef'.match(new RegExp('c$...$'))
-new TestCase ( SECTION, "(multiline == false) 'abc\ndef'.match(new RegExp('c$...$'))",
-	       null, 'abc\ndef'.match(new RegExp('c$...$')));
-
-// **Now we do the tests with RegExp.multiline set to true
-// RegExp.multiline = true; RegExp.multiline
-RegExp.multiline = true;
-new TestCase ( SECTION, "RegExp.multiline = true; RegExp.multiline",
-	       true, RegExp.multiline);
-
-// (multiline == true) '123\n456'.match(/^4../)
-new TestCase ( SECTION, "(multiline == true) '123\\n456'.match(/^4../)",
-	       String(['456']), String('123\n456'.match(/^4../)));
-
-// (multiline == true) 'a11\na22\na23\na24'.match(/^a../g)
-new TestCase ( SECTION, "(multiline == true) 'a11\\na22\\na23\\na24'.match(/^a../g)",
-	       String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(/^a../g)));
-
-// (multiline == true) 'a11\na22'.match(/^.+^./)
-//new TestCase ( SECTION, "(multiline == true) 'a11\na22'.match(/^.+^./)",
-//                                    String(['a11\na']), String('a11\na22'.match(/^.+^./)));
-
-// (multiline == true) '123\n456'.match(/.3$/)
-new TestCase ( SECTION, "(multiline == true) '123\\n456'.match(/.3$/)",
-	       String(['23']), String('123\n456'.match(/.3$/)));
-
-// (multiline == true) 'a11\na22\na23\na24'.match(/a..$/g)
-new TestCase ( SECTION, "(multiline == true) 'a11\\na22\\na23\\na24'.match(/a..$/g)",
-	       String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(/a..$/g)));
-
-// (multiline == true) 'a11\na22\na23\na24'.match(new RegExp('a..$','g'))
-new TestCase ( SECTION, "(multiline == true) 'a11\\na22\\na23\\na24'.match(new RegExp('a..$','g'))",
-	       String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(new RegExp('a..$','g'))));
-
-// (multiline == true) 'abc\ndef'.match(/c$....$/)
-//new TestCase ( SECTION, "(multiline == true) 'abc\ndef'.match(/c$.+$/)",
-//                                    'c\ndef', String('abc\ndef'.match(/c$.+$/)));
-
-RegExp.multiline = false;
-
-test();
deleted file mode 100644
--- a/js/src/tests/js1_2/regexp/RegExp_multiline_as_array.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- 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/. */
-
-
-/**
-   Filename:     RegExp_multiline_as_array.js
-   Description:  'Tests RegExps $* property  (same tests as RegExp_multiline.js but using $*)'
-
-   Author:       Nick Lerissa
-   Date:         March 13, 1998
-*/
-
-var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
-var VERSION = 'no version';
-startTest();
-var TITLE   = 'RegExp: $*';
-
-writeHeaderToLog('Executing script: RegExp_multiline_as_array.js');
-writeHeaderToLog( SECTION + " "+ TITLE);
-
-
-// First we do a series of tests with RegExp['$*'] set to false (default value)
-// Following this we do the same tests with RegExp['$*'] set true(**).
-// RegExp['$*']
-new TestCase ( SECTION, "RegExp['$*']",
-	       false, RegExp['$*']);
-
-// (['$*'] == false) '123\n456'.match(/^4../)
-new TestCase ( SECTION, "(['$*'] == false) '123\\n456'.match(/^4../)",
-	       null, '123\n456'.match(/^4../));
-
-// (['$*'] == false) 'a11\na22\na23\na24'.match(/^a../g)
-new TestCase ( SECTION, "(['$*'] == false) 'a11\\na22\\na23\\na24'.match(/^a../g)",
-	       String(['a11']), String('a11\na22\na23\na24'.match(/^a../g)));
-
-// (['$*'] == false) 'a11\na22'.match(/^.+^./)
-new TestCase ( SECTION, "(['$*'] == false) 'a11\na22'.match(/^.+^./)",
-	       null, 'a11\na22'.match(/^.+^./));
-
-// (['$*'] == false) '123\n456'.match(/.3$/)
-new TestCase ( SECTION, "(['$*'] == false) '123\\n456'.match(/.3$/)",
-	       null, '123\n456'.match(/.3$/));
-
-// (['$*'] == false) 'a11\na22\na23\na24'.match(/a..$/g)
-new TestCase ( SECTION, "(['$*'] == false) 'a11\\na22\\na23\\na24'.match(/a..$/g)",
-	       String(['a24']), String('a11\na22\na23\na24'.match(/a..$/g)));
-
-// (['$*'] == false) 'abc\ndef'.match(/c$...$/)
-new TestCase ( SECTION, "(['$*'] == false) 'abc\ndef'.match(/c$...$/)",
-	       null, 'abc\ndef'.match(/c$...$/));
-
-// (['$*'] == false) 'a11\na22\na23\na24'.match(new RegExp('a..$','g'))
-new TestCase ( SECTION, "(['$*'] == false) 'a11\\na22\\na23\\na24'.match(new RegExp('a..$','g'))",
-	       String(['a24']), String('a11\na22\na23\na24'.match(new RegExp('a..$','g'))));
-
-// (['$*'] == false) 'abc\ndef'.match(new RegExp('c$...$'))
-new TestCase ( SECTION, "(['$*'] == false) 'abc\ndef'.match(new RegExp('c$...$'))",
-	       null, 'abc\ndef'.match(new RegExp('c$...$')));
-
-// **Now we do the tests with RegExp['$*'] set to true
-// RegExp['$*'] = true; RegExp['$*']
-RegExp['$*'] = true;
-new TestCase ( SECTION, "RegExp['$*'] = true; RegExp['$*']",
-	       true, RegExp['$*']);
-
-// (['$*'] == true) '123\n456'.match(/^4../)
-new TestCase ( SECTION, "(['$*'] == true) '123\\n456'.match(/^4../)",
-	       String(['456']), String('123\n456'.match(/^4../)));
-
-// (['$*'] == true) 'a11\na22\na23\na24'.match(/^a../g)
-new TestCase ( SECTION, "(['$*'] == true) 'a11\\na22\\na23\\na24'.match(/^a../g)",
-	       String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(/^a../g)));
-
-// (['$*'] == true) 'a11\na22'.match(/^.+^./)
-//new TestCase ( SECTION, "(['$*'] == true) 'a11\na22'.match(/^.+^./)",
-//                                    String(['a11\na']), String('a11\na22'.match(/^.+^./)));
-
-// (['$*'] == true) '123\n456'.match(/.3$/)
-new TestCase ( SECTION, "(['$*'] == true) '123\\n456'.match(/.3$/)",
-	       String(['23']), String('123\n456'.match(/.3$/)));
-
-// (['$*'] == true) 'a11\na22\na23\na24'.match(/a..$/g)
-new TestCase ( SECTION, "(['$*'] == true) 'a11\\na22\\na23\\na24'.match(/a..$/g)",
-	       String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(/a..$/g)));
-
-// (['$*'] == true) 'a11\na22\na23\na24'.match(new RegExp('a..$','g'))
-new TestCase ( SECTION, "(['$*'] == true) 'a11\\na22\\na23\\na24'.match(new RegExp('a..$','g'))",
-	       String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(new RegExp('a..$','g'))));
-
-// (['$*'] == true) 'abc\ndef'.match(/c$....$/)
-//new TestCase ( SECTION, "(['$*'] == true) 'abc\ndef'.match(/c$.+$/)",
-//                                    'c\ndef', String('abc\ndef'.match(/c$.+$/)));
-
-RegExp['$*'] = false;
-
-test();
--- a/js/src/tests/js1_2/regexp/beginLine.js
+++ b/js/src/tests/js1_2/regexp/beginLine.js
@@ -36,14 +36,9 @@ new TestCase ( SECTION, "'yyyyy'.match(n
 // '^^^x'.match(new RegExp('^\\^+'))
 new TestCase ( SECTION, "'^^^x'.match(new RegExp('^\\^+'))",
 	       String(['^^^']), String('^^^x'.match(new RegExp('^\\^+'))));
 
 // '^^^x'.match(/^\^+/)
 new TestCase ( SECTION, "'^^^x'.match(/^\\^+/)",
 	       String(['^^^']), String('^^^x'.match(/^\^+/)));
 
-RegExp.multiline = true;
-// 'abc\n123xyz'.match(new RegExp('^\d+')) <multiline==true>
-new TestCase ( SECTION, "'abc\n123xyz'.match(new RegExp('^\\d+'))",
-	       String(['123']), String('abc\n123xyz'.match(new RegExp('^\\d+'))));
-
 test();
--- a/js/src/tests/js1_2/regexp/endLine.js
+++ b/js/src/tests/js1_2/regexp/endLine.js
@@ -36,14 +36,9 @@ new TestCase ( SECTION, "'yyyyy'.match(n
 // 'a$$$'.match(new RegExp('\\$+$'))
 new TestCase ( SECTION, "'a$$$'.match(new RegExp('\\$+$'))",
 	       String(['$$$']), String('a$$$'.match(new RegExp('\\$+$'))));
 
 // 'a$$$'.match(/\$+$/)
 new TestCase ( SECTION, "'a$$$'.match(/\\$+$/)",
 	       String(['$$$']), String('a$$$'.match(/\$+$/)));
 
-RegExp.multiline = true;
-// 'abc\n123xyz890\nxyz'.match(new RegExp('\d+$')) <multiline==true>
-new TestCase ( SECTION, "'abc\n123xyz890\nxyz'.match(new RegExp('\\d+$'))",
-	       String(['890']), String('abc\n123xyz890\nxyz'.match(new RegExp('\\d+$'))));
-
 test();
deleted file mode 100644
--- a/js/src/tests/js1_5/Regress/regress-418504.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- 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 = 418504;
-var summary = 'Untagged boolean stored in a jsval in JS_ConvertValue';
-var actual = '';
-var expect = '';
-
-
-//-----------------------------------------------------------------------------
-test();
-//-----------------------------------------------------------------------------
-
-function test()
-{
-  enterFunc ('test');
-  printBugNumber(BUGNUMBER);
-  printStatus (summary);
- 
-  expect = false;
-  actual = RegExp.multiline;
-  reportCompare(expect, actual, 'RegExp.multiline');
-
-  expect = true;
-  RegExp.multiline = 17;
-  actual = RegExp.multiline;
-  reportCompare(expect, actual, 'RegExp.multiline = 17');
-
-  expect = true;
-  RegExp.multiline = 17;
-  actual = RegExp.multiline;
-  reportCompare(expect, actual, 'RegExp.multiline = 17');
-
-  expect = true;
-  RegExp.multiline = 17;
-  actual = RegExp.multiline;
-  reportCompare(expect, actual, 'RegExp.multiline = 17');
-
-  expect = true;
-  RegExp.multiline = true;
-  actual = RegExp.multiline;
-  reportCompare(expect, actual, 'RegExp.multiline = true');
-
-  expect = true;
-  RegExp.multiline = 17;
-  actual = RegExp.multiline;
-  reportCompare(expect, actual, 'RegExp.multiline = 17');
-
-  exitFunc ('test');
-}
--- a/js/xpconnect/tests/chrome/test_xrayToJS.xul
+++ b/js/xpconnect/tests/chrome/test_xrayToJS.xul
@@ -224,19 +224,19 @@ https://bugzilla.mozilla.org/show_bug.cg
      "isGenerator", "length", "name", "arguments", "caller"];
   gConstructorProperties['Function'] = constructorProps([])
 
   gPrototypeProperties['RegExp'] =
     ["constructor", "toSource", "toString", "compile", "exec", "test",
      "flags", "global", "ignoreCase", "multiline", "source", "sticky", "unicode",
      "lastIndex"];
   gConstructorProperties['RegExp'] =
-    constructorProps(["input", "multiline", "lastMatch", "lastParen",
+    constructorProps(["input", "lastMatch", "lastParen",
                       "leftContext", "rightContext", "$1", "$2", "$3", "$4",
-                      "$5", "$6", "$7", "$8", "$9", "$_", "$*", "$&", "$+",
+                      "$5", "$6", "$7", "$8", "$9", "$_", "$&", "$+",
                       "$`", "$'"])
 
   // Sort an array that may contain symbols as well as strings.
   function sortProperties(arr) {
     function sortKey(prop) {
       return typeof prop + ":" + prop.toString();
     }
     arr.sort((a, b) => sortKey(a) < sortKey(b) ? -1 : +1);
@@ -709,19 +709,19 @@ https://bugzilla.mozilla.org/show_bug.cg
     }
   }
 
   function testRegExp() {
     // RegExp statics are very weird, and in particular RegExp has static
     // properties that have to do with the last regexp execution in the global.
     // Xraying those makes no sense, so we just skip constructor properties for
     // RegExp xrays.
-    let ctorPropsToSkip = ["input", "multiline", "lastMatch", "lastParen",
+    let ctorPropsToSkip = ["input", "lastMatch", "lastParen",
                            "leftContext", "rightContext", "$1", "$2", "$3",
-                           "$4", "$5", "$6", "$7", "$8", "$9", "$_", "$*", "$&",
+                           "$4", "$5", "$6", "$7", "$8", "$9", "$_", "$&",
                            "$+", "$`", "$'"];
     testXray('RegExp', new iwin.RegExp('foo'), new iwin.RegExp(), [],
              ctorPropsToSkip);
 
     // Test the self-hosted |flags| property, toString, and toSource.
     for (var flags of ["", "g", "i", "m", "y", "gimy"]) {
       var re = new iwin.RegExp("foo", flags);
       is(re.flags, re.wrappedJSObject.flags, "Results match");