| Index: src/js/regexp.js
|
| diff --git a/src/js/regexp.js b/src/js/regexp.js
|
| index ef6a4aed053b3d15f23056a64c4540112be08337..b2ba2dfa4e074777fee3abb4387a393ffa53d668 100644
|
| --- a/src/js/regexp.js
|
| +++ b/src/js/regexp.js
|
| @@ -24,6 +24,7 @@ var MinSimple;
|
| var matchSymbol = utils.ImportNow("match_symbol");
|
| var replaceSymbol = utils.ImportNow("replace_symbol");
|
| var searchSymbol = utils.ImportNow("search_symbol");
|
| +var speciesSymbol = utils.ImportNow("species_symbol");
|
| var splitSymbol = utils.ImportNow("split_symbol");
|
| var SpeciesConstructor;
|
|
|
| @@ -539,22 +540,6 @@ function RegExpSubclassSplit(string, limit) {
|
| %FunctionRemovePrototype(RegExpSubclassSplit);
|
|
|
|
|
| -// Legacy implementation of RegExp.prototype[Symbol.match] which
|
| -// doesn't properly call the underlying exec method
|
| -function RegExpMatch(string) {
|
| - if (!IS_REGEXP(this)) {
|
| - throw MakeTypeError(kIncompatibleMethodReceiver,
|
| - "RegExp.prototype.@@match", this);
|
| - }
|
| - var subject = TO_STRING(string);
|
| -
|
| - if (!REGEXP_GLOBAL(this)) return RegExpExecNoTests(this, subject, 0);
|
| - this.lastIndex = 0;
|
| - var result = %StringMatch(subject, this, RegExpLastMatchInfo);
|
| - return result;
|
| -}
|
| -
|
| -
|
| // ES#sec-regexp.prototype-@@match
|
| // RegExp.prototype [ @@match ] ( string )
|
| function RegExpSubclassMatch(string) {
|
| @@ -954,19 +939,6 @@ function RegExpSubclassReplace(string, replace) {
|
| %FunctionRemovePrototype(RegExpSubclassReplace);
|
|
|
|
|
| -// Legacy implementation of RegExp.prototype[Symbol.search] which
|
| -// doesn't properly use the overridden exec method
|
| -function RegExpSearch(string) {
|
| - if (!IS_REGEXP(this)) {
|
| - throw MakeTypeError(kIncompatibleMethodReceiver,
|
| - "RegExp.prototype.@@search", this);
|
| - }
|
| - var match = DoRegExpExec(this, TO_STRING(string), 0);
|
| - if (match) return match[CAPTURE0];
|
| - return -1;
|
| -}
|
| -
|
| -
|
| // ES#sec-regexp.prototype-@@search
|
| // RegExp.prototype [ @@search ] ( string )
|
| function RegExpSubclassSearch(string) {
|
| @@ -1134,6 +1106,27 @@ function RegExpGetSticky() {
|
| }
|
| %SetForceInlineFlag(RegExpGetSticky);
|
|
|
| +
|
| +// ES6 21.2.5.15.
|
| +function RegExpGetUnicode() {
|
| + if (!IS_REGEXP(this)) {
|
| + // TODO(littledan): Remove this RegExp compat workaround
|
| + if (this === GlobalRegExpPrototype) {
|
| + %IncrementUseCounter(kRegExpPrototypeUnicodeGetter);
|
| + return UNDEFINED;
|
| + }
|
| + throw MakeTypeError(kRegExpNonRegExp, "RegExp.prototype.unicode");
|
| + }
|
| + return TO_BOOLEAN(REGEXP_UNICODE(this));
|
| +}
|
| +%SetForceInlineFlag(RegExpGetUnicode);
|
| +
|
| +
|
| +function RegExpSpecies() {
|
| + return this;
|
| +}
|
| +
|
| +
|
| // -------------------------------------------------------------------
|
|
|
| %FunctionSetInstanceClassName(GlobalRegExp, 'RegExp');
|
| @@ -1143,15 +1136,17 @@ GlobalRegExpPrototype = new GlobalObject();
|
| GlobalRegExp.prototype, 'constructor', GlobalRegExp, DONT_ENUM);
|
| %SetCode(GlobalRegExp, RegExpConstructor);
|
|
|
| +utils.InstallGetter(GlobalRegExp, speciesSymbol, RegExpSpecies);
|
| +
|
| utils.InstallFunctions(GlobalRegExp.prototype, DONT_ENUM, [
|
| - "exec", RegExpExecJS,
|
| - "test", RegExpTest,
|
| + "exec", RegExpSubclassExecJS,
|
| + "test", RegExpSubclassTest,
|
| "toString", RegExpToString,
|
| "compile", RegExpCompileJS,
|
| - matchSymbol, RegExpMatch,
|
| - replaceSymbol, RegExpReplace,
|
| - searchSymbol, RegExpSearch,
|
| - splitSymbol, RegExpSplit,
|
| + matchSymbol, RegExpSubclassMatch,
|
| + replaceSymbol, RegExpSubclassReplace,
|
| + searchSymbol, RegExpSubclassSearch,
|
| + splitSymbol, RegExpSubclassSplit,
|
| ]);
|
|
|
| utils.InstallGetter(GlobalRegExp.prototype, 'flags', RegExpGetFlags);
|
| @@ -1160,6 +1155,7 @@ utils.InstallGetter(GlobalRegExp.prototype, 'ignoreCase', RegExpGetIgnoreCase);
|
| utils.InstallGetter(GlobalRegExp.prototype, 'multiline', RegExpGetMultiline);
|
| utils.InstallGetter(GlobalRegExp.prototype, 'source', RegExpGetSource);
|
| utils.InstallGetter(GlobalRegExp.prototype, 'sticky', RegExpGetSticky);
|
| +utils.InstallGetter(GlobalRegExp.prototype, 'unicode', RegExpGetUnicode);
|
|
|
| // The properties `input` and `$_` are aliases for each other. When this
|
| // value is set the value it is set to is coerced to a string.
|
| @@ -1234,12 +1230,6 @@ utils.Export(function(to) {
|
| to.RegExpExec = DoRegExpExec;
|
| to.RegExpInitialize = RegExpInitialize;
|
| to.RegExpLastMatchInfo = RegExpLastMatchInfo;
|
| - to.RegExpSubclassExecJS = RegExpSubclassExecJS;
|
| - to.RegExpSubclassMatch = RegExpSubclassMatch;
|
| - to.RegExpSubclassReplace = RegExpSubclassReplace;
|
| - to.RegExpSubclassSearch = RegExpSubclassSearch;
|
| - to.RegExpSubclassSplit = RegExpSubclassSplit;
|
| - to.RegExpSubclassTest = RegExpSubclassTest;
|
| to.RegExpTest = RegExpTest;
|
| });
|
|
|
|
|