Index: src/js/regexp.js |
diff --git a/src/js/regexp.js b/src/js/regexp.js |
index 086f5e5c5e62b466e8ccf81653a6d4ed76979816..d358ce06b55d6070eef78b9d4f1224630db8fc84 100644 |
--- a/src/js/regexp.js |
+++ b/src/js/regexp.js |
@@ -270,8 +270,17 @@ function TrimRegExp(regexp) { |
} |
+const kRegExpPrototypeToString = 12; |
+ |
function RegExpToString() { |
if (!IS_REGEXP(this)) { |
+ // RegExp.prototype.toString() returns '/(?:)/' as a compatibility fix; |
+ // a UseCounter is incremented to track it. |
+ // TODO(littledan): Remove this workaround or standardize it |
+ if (this === GlobalRegExpPrototype) { |
+ %IncrementUseCounter(kRegExpPrototypeToString); |
+ return '/(?:)/'; |
+ } |
throw MakeTypeError(kIncompatibleMethodReceiver, |
'RegExp.prototype.toString', this); |
} |
@@ -491,7 +500,8 @@ function RegExpGetSource() { |
// ------------------------------------------------------------------- |
%FunctionSetInstanceClassName(GlobalRegExp, 'RegExp'); |
-%FunctionSetPrototype(GlobalRegExp, new GlobalObject()); |
+const GlobalRegExpPrototype = new GlobalObject(); |
Yang
2015/12/22 06:31:22
Regexp.js is one of the remaining native scripts t
Dan Ehrenberg
2015/12/22 07:20:42
I think this makes sense, since it'll be a clean u
|
+%FunctionSetPrototype(GlobalRegExp, GlobalRegExpPrototype); |
%AddNamedProperty( |
GlobalRegExp.prototype, 'constructor', GlobalRegExp, DONT_ENUM); |
%SetCode(GlobalRegExp, RegExpConstructor); |