Index: src/string.js |
diff --git a/src/string.js b/src/string.js |
index bed211a031e4f9bec5b1604031fc41a0e73b0d00..01224e796aee2f2c4a3401c6efce5c9ff9ddb3ac 100644 |
--- a/src/string.js |
+++ b/src/string.js |
@@ -251,7 +251,9 @@ function StringReplace(search, replace) { |
// Compute the string to replace with. |
if (IS_FUNCTION(replace)) { |
- builder.add(%_CallFunction(%GetGlobalReceiver(), |
+ var receiver = |
+ %_IsNativeOrStrictMode(replace) ? void 0 : %GetGlobalReceiver(); |
+ builder.add(%_CallFunction(receiver, |
search, |
start, |
subject, |
@@ -418,7 +420,8 @@ function StringReplaceGlobalRegExpWithFunction(subject, regexp, replace) { |
if (NUMBER_OF_CAPTURES(lastMatchInfo) == 2) { |
var match_start = 0; |
var override = new InternalArray(null, 0, subject); |
- var receiver = %GetGlobalReceiver(); |
+ var receiver = |
+ %_IsNativeOrStrictMode(replace) ? void 0 : %GetGlobalReceiver(); |
while (i < len) { |
var elem = res[i]; |
if (%_IsSmi(elem)) { |
@@ -475,8 +478,10 @@ function StringReplaceNonGlobalRegExpWithFunction(subject, regexp, replace) { |
// No captures, only the match, which is always valid. |
var s = SubString(subject, index, endOfMatch); |
// Don't call directly to avoid exposing the built-in global object. |
+ var receiver = |
+ %_IsNativeOrStrictMode(replace) ? void 0 : %GetGlobalReceiver(); |
replacement = |
- %_CallFunction(%GetGlobalReceiver(), s, index, subject, replace); |
+ %_CallFunction(receiver, s, index, subject, replace); |
} else { |
var parameters = new InternalArray(m + 2); |
for (var j = 0; j < m; j++) { |