diff options
Diffstat (limited to 'deps/v8/src/regexp.js')
-rw-r--r-- | deps/v8/src/regexp.js | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/deps/v8/src/regexp.js b/deps/v8/src/regexp.js index 38d4496153..0ab86f3338 100644 --- a/deps/v8/src/regexp.js +++ b/deps/v8/src/regexp.js @@ -95,12 +95,11 @@ function RegExpConstructor(pattern, flags) { } } - // Deprecated RegExp.prototype.compile method. We behave like the constructor // were called again. In SpiderMonkey, this method returns the regexp object. // In JSC, it returns undefined. For compatibility with JSC, we match their // behavior. -function CompileRegExp(pattern, flags) { +function RegExpCompile(pattern, flags) { // Both JSC and SpiderMonkey treat a missing pattern argument as the // empty subject string, and an actual undefined value passed as the // pattern as the string 'undefined'. Note that JSC is inconsistent @@ -108,6 +107,11 @@ function CompileRegExp(pattern, flags) { // RegExp.prototype.compile and in the constructor, where they are // the empty string. For compatibility with JSC, we match their // behavior. + if (this == $RegExp.prototype) { + // We don't allow recompiling RegExp.prototype. + throw MakeTypeError('incompatible_method_receiver', + ['RegExp.prototype.compile', this]); + } if (IS_UNDEFINED(pattern) && %_ArgumentsLength() != 0) { DoConstructRegExp(this, 'undefined', flags); } else { @@ -408,7 +412,6 @@ var lastMatchInfoOverride = null; function SetUpRegExp() { %CheckIsBootstrapping(); %FunctionSetInstanceClassName($RegExp, 'RegExp'); - %FunctionSetPrototype($RegExp, new $Object()); %SetProperty($RegExp.prototype, 'constructor', $RegExp, DONT_ENUM); %SetCode($RegExp, RegExpConstructor); @@ -416,7 +419,7 @@ function SetUpRegExp() { "exec", RegExpExec, "test", RegExpTest, "toString", RegExpToString, - "compile", CompileRegExp + "compile", RegExpCompile )); // The length of compile is 1 in SpiderMonkey. |