| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 5cf2d44cb50f13a3a956142fc705466d8d5c2f66..fd622f29f7c6d8639a67939c7bff74d910a85bb8 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -1790,9 +1790,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpInitializeObject) {
|
| JSRegExp::kIgnoreCaseFieldIndex, ignoreCase, SKIP_WRITE_BARRIER);
|
| regexp->InObjectPropertyAtPut(
|
| JSRegExp::kMultilineFieldIndex, multiline, SKIP_WRITE_BARRIER);
|
| - regexp->InObjectPropertyAtPut(JSRegExp::kLastIndexFieldIndex,
|
| - Smi::FromInt(0),
|
| - SKIP_WRITE_BARRIER); // It's a Smi.
|
| + regexp->ResetLastIndex();
|
| return regexp;
|
| }
|
|
|
| @@ -2904,7 +2902,10 @@ MUST_USE_RESULT static MaybeObject* StringReplaceAtomRegExpWithString(
|
| isolate, *subject, pattern, &indices, 0xffffffff, zone);
|
|
|
| int matches = indices.length();
|
| - if (matches == 0) return *subject;
|
| + if (matches == 0) {
|
| + pattern_regexp->ResetLastIndex();
|
| + return *subject;
|
| + }
|
|
|
| // Detect integer overflow.
|
| int64_t result_len_64 =
|
| @@ -3004,6 +3005,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithString(
|
| int32_t* current_match = global_cache.FetchNext();
|
| if (current_match == NULL) {
|
| if (global_cache.HasException()) return Failure::Exception();
|
| + regexp->ResetLastIndex();
|
| return *subject;
|
| }
|
|
|
| @@ -3102,6 +3104,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithEmptyString(
|
| int32_t* current_match = global_cache.FetchNext();
|
| if (current_match == NULL) {
|
| if (global_cache.HasException()) return Failure::Exception();
|
| + regexp->ResetLastIndex();
|
| return *subject;
|
| }
|
|
|
|
|