Index: src/runtime/runtime-regexp.cc |
diff --git a/src/runtime/runtime-regexp.cc b/src/runtime/runtime-regexp.cc |
index b36e5e66cbae17b447958a05c6ef192a94197272..70e75406819a12ff052efd8b7fd058b106df15f6 100644 |
--- a/src/runtime/runtime-regexp.cc |
+++ b/src/runtime/runtime-regexp.cc |
@@ -389,12 +389,11 @@ void FindStringIndicesDispatch(Isolate* isolate, String* subject, |
template <typename ResultSeqString> |
MUST_USE_RESULT static Object* StringReplaceGlobalAtomRegExpWithString( |
Isolate* isolate, Handle<String> subject, Handle<JSRegExp> pattern_regexp, |
- Handle<String> replacement, Handle<JSObject> last_match_info) { |
+ Handle<String> replacement, Handle<JSObject> last_match_info, Zone* zone) { |
DCHECK(subject->IsFlat()); |
DCHECK(replacement->IsFlat()); |
- ZoneScope zone_scope(isolate->runtime_zone()); |
- ZoneList<int> indices(8, zone_scope.zone()); |
+ ZoneList<int> indices(8, zone); |
DCHECK_EQ(JSRegExp::ATOM, pattern_regexp->TypeTag()); |
String* pattern = |
String::cast(pattern_regexp->DataAt(JSRegExp::kAtomPatternIndex)); |
@@ -403,7 +402,7 @@ MUST_USE_RESULT static Object* StringReplaceGlobalAtomRegExpWithString( |
int replacement_len = replacement->length(); |
FindStringIndicesDispatch(isolate, *subject, pattern, &indices, 0xffffffff, |
- zone_scope.zone()); |
+ zone); |
int matches = indices.length(); |
if (matches == 0) return *subject; |
@@ -483,10 +482,12 @@ MUST_USE_RESULT static Object* StringReplaceGlobalRegExpWithString( |
if (regexp->TypeTag() == JSRegExp::ATOM && simple_replace) { |
if (subject->HasOnlyOneByteChars() && replacement->HasOnlyOneByteChars()) { |
return StringReplaceGlobalAtomRegExpWithString<SeqOneByteString>( |
- isolate, subject, regexp, replacement, last_match_info); |
+ isolate, subject, regexp, replacement, last_match_info, |
+ zone_scope.zone()); |
} else { |
return StringReplaceGlobalAtomRegExpWithString<SeqTwoByteString>( |
- isolate, subject, regexp, replacement, last_match_info); |
+ isolate, subject, regexp, replacement, last_match_info, |
+ zone_scope.zone()); |
} |
} |
@@ -548,7 +549,7 @@ MUST_USE_RESULT static Object* StringReplaceGlobalRegExpWithString( |
template <typename ResultSeqString> |
MUST_USE_RESULT static Object* StringReplaceGlobalRegExpWithEmptyString( |
Isolate* isolate, Handle<String> subject, Handle<JSRegExp> regexp, |
- Handle<JSObject> last_match_info) { |
+ Handle<JSObject> last_match_info, Zone* zone) { |
DCHECK(subject->IsFlat()); |
// Shortcut for simple non-regexp global replacements |
@@ -556,10 +557,10 @@ MUST_USE_RESULT static Object* StringReplaceGlobalRegExpWithEmptyString( |
Handle<String> empty_string = isolate->factory()->empty_string(); |
if (subject->IsOneByteRepresentation()) { |
return StringReplaceGlobalAtomRegExpWithString<SeqOneByteString>( |
- isolate, subject, regexp, empty_string, last_match_info); |
+ isolate, subject, regexp, empty_string, last_match_info, zone); |
} else { |
return StringReplaceGlobalAtomRegExpWithString<SeqTwoByteString>( |
- isolate, subject, regexp, empty_string, last_match_info); |
+ isolate, subject, regexp, empty_string, last_match_info, zone); |
} |
} |
@@ -658,13 +659,15 @@ RUNTIME_FUNCTION(Runtime_StringReplaceGlobalRegExpWithString) { |
subject = String::Flatten(subject); |
+ ZoneScope zone_scope(isolate->runtime_zone()); |
+ |
if (replacement->length() == 0) { |
if (subject->HasOnlyOneByteChars()) { |
return StringReplaceGlobalRegExpWithEmptyString<SeqOneByteString>( |
- isolate, subject, regexp, last_match_info); |
+ isolate, subject, regexp, last_match_info, zone_scope.zone()); |
} else { |
return StringReplaceGlobalRegExpWithEmptyString<SeqTwoByteString>( |
- isolate, subject, regexp, last_match_info); |
+ isolate, subject, regexp, last_match_info, zone_scope.zone()); |
} |
} |