Index: src/regexp.js |
=================================================================== |
--- src/regexp.js (revision 9531) |
+++ src/regexp.js (working copy) |
@@ -95,12 +95,11 @@ |
} |
} |
- |
// 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 @@ |
// 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 @@ |
function SetUpRegExp() { |
%CheckIsBootstrapping(); |
%FunctionSetInstanceClassName($RegExp, 'RegExp'); |
- %FunctionSetPrototype($RegExp, new $Object()); |
%SetProperty($RegExp.prototype, 'constructor', $RegExp, DONT_ENUM); |
%SetCode($RegExp, RegExpConstructor); |
@@ -416,7 +419,7 @@ |
"exec", RegExpExec, |
"test", RegExpTest, |
"toString", RegExpToString, |
- "compile", CompileRegExp |
+ "compile", RegExpCompile |
)); |
// The length of compile is 1 in SpiderMonkey. |
Property changes on: src/regexp.js |
___________________________________________________________________ |
Modified: svn:mergeinfo |
Merged /branches/experimental/gc/src/regexp.js:r6007-9327 |
Merged /branches/bleeding_edge/src/regexp.js:r9287-9529 |