Index: src/js/regexp.js |
diff --git a/src/js/regexp.js b/src/js/regexp.js |
index a1055b3dd5e2f876dbe253dab400d53e96ee1aad..ab148b4b9fce4a89df709db8e1d658b1b4bd41df 100644 |
--- a/src/js/regexp.js |
+++ b/src/js/regexp.js |
@@ -1020,6 +1020,22 @@ function RegExpMakeCaptureGetter(n) { |
} |
+// ES6 21.2.5.3. |
+function RegExpGetFlags() { |
+ if (!IS_RECEIVER(this)) { |
+ throw MakeTypeError( |
+ kRegExpNonObject, "RegExp.prototype.flags", TO_STRING(this)); |
+ } |
+ var result = ''; |
+ if (this.global) result += 'g'; |
+ if (this.ignoreCase) result += 'i'; |
+ if (this.multiline) result += 'm'; |
+ if (this.unicode) result += 'u'; |
+ if (this.sticky) result += 'y'; |
+ return result; |
+} |
+ |
+ |
// ES6 21.2.5.4. |
function RegExpGetGlobal() { |
if (!IS_REGEXP(this)) { |
@@ -1032,8 +1048,6 @@ function RegExpGetGlobal() { |
} |
return !!REGEXP_GLOBAL(this); |
} |
-%FunctionSetName(RegExpGetGlobal, "RegExp.prototype.global"); |
-%SetNativeFlag(RegExpGetGlobal); |
// ES6 21.2.5.5. |
@@ -1048,8 +1062,6 @@ function RegExpGetIgnoreCase() { |
} |
return !!REGEXP_IGNORE_CASE(this); |
} |
-%FunctionSetName(RegExpGetIgnoreCase, "RegExp.prototype.ignoreCase"); |
-%SetNativeFlag(RegExpGetIgnoreCase); |
// ES6 21.2.5.7. |
@@ -1064,8 +1076,6 @@ function RegExpGetMultiline() { |
} |
return !!REGEXP_MULTILINE(this); |
} |
-%FunctionSetName(RegExpGetMultiline, "RegExp.prototype.multiline"); |
-%SetNativeFlag(RegExpGetMultiline); |
// ES6 21.2.5.10. |
@@ -1080,8 +1090,21 @@ function RegExpGetSource() { |
} |
return REGEXP_SOURCE(this); |
} |
-%FunctionSetName(RegExpGetSource, "RegExp.prototype.source"); |
-%SetNativeFlag(RegExpGetSource); |
+ |
+ |
+// ES6 21.2.5.12. |
+function RegExpGetSticky() { |
+ if (!IS_REGEXP(this)) { |
+ // Compat fix: RegExp.prototype.sticky == undefined; UseCounter tracks it |
+ // TODO(littledan): Remove this workaround or standardize it |
+ if (this === GlobalRegExpPrototype) { |
+ %IncrementUseCounter(kRegExpPrototypeStickyGetter); |
+ return UNDEFINED; |
+ } |
+ throw MakeTypeError(kRegExpNonRegExp, "RegExp.prototype.sticky"); |
+ } |
+ return !!REGEXP_STICKY(this); |
+} |
// ------------------------------------------------------------------- |
@@ -1103,10 +1126,12 @@ utils.InstallFunctions(GlobalRegExp.prototype, DONT_ENUM, [ |
splitSymbol, RegExpSplit, |
]); |
+utils.InstallGetter(GlobalRegExp.prototype, 'flags', RegExpGetFlags); |
utils.InstallGetter(GlobalRegExp.prototype, 'global', RegExpGetGlobal); |
utils.InstallGetter(GlobalRegExp.prototype, 'ignoreCase', RegExpGetIgnoreCase); |
utils.InstallGetter(GlobalRegExp.prototype, 'multiline', RegExpGetMultiline); |
utils.InstallGetter(GlobalRegExp.prototype, 'source', RegExpGetSource); |
+utils.InstallGetter(GlobalRegExp.prototype, 'sticky', RegExpGetSticky); |
// 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. |