From 17d3f54b09c19cc3903106efb2ae5ea351f78d59 Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Thu, 8 Sep 2011 11:03:26 +0000 Subject: [PATCH] Amends to r9181 and r9191. Review URL: http://codereview.chromium.org/7847019 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9192 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/api.cc | 6 ------ src/runtime.cc | 42 ++++++++++++++++++++++++------------------ 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/api.cc b/src/api.cc index 5a7c0d5..0207f51 100644 --- a/src/api.cc +++ b/src/api.cc @@ -4979,18 +4979,12 @@ void V8::RemoveMemoryAllocationCallback(MemoryAllocationCallback callback) { void V8::PauseProfiler() { - ApiCheck(i::FLAG_prof, - "V8::ResumeProfiler", - "Profiling has to be enabled with --prof"); i::Isolate* isolate = i::Isolate::Current(); isolate->logger()->PauseProfiler(); } void V8::ResumeProfiler() { - ApiCheck(i::FLAG_prof, - "V8::ResumeProfiler", - "Profiling has to be enabled with --prof"); i::Isolate* isolate = i::Isolate::Current(); isolate->logger()->ResumeProfiler(); } diff --git a/src/runtime.cc b/src/runtime.cc index b1cbaf2..95a24f0 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -2591,11 +2591,9 @@ class CompiledReplacement { int subject_length) { int length = characters.length(); int last = 0; - bool simple = true; for (int i = 0; i < length; i++) { Char c = characters[i]; if (c == '$') { - simple = false; int next_index = i + 1; if (next_index == length) { // No next character! break; @@ -2684,11 +2682,12 @@ class CompiledReplacement { if (length > last) { if (last == 0) { parts->Add(ReplacementPart::ReplacementString()); + return true; } else { parts->Add(ReplacementPart::ReplacementSubString(last, length)); } } - return simple; + return false; } ZoneList parts_; @@ -2879,17 +2878,18 @@ MUST_USE_RESULT static MaybeObject* StringReplaceStringWithString( Isolate* isolate, Handle subject, Handle pattern_regexp, - Handle replacement = Handle::null()) { + Handle replacement) { ASSERT(subject->IsFlat()); - ASSERT(replacement.is_null() || replacement->IsFlat()); + ASSERT(replacement->IsFlat()); ZoneScope zone_space(isolate, DELETE_ON_EXIT); ZoneList indices(8); + ASSERT_EQ(JSRegExp::ATOM, pattern_regexp->TypeTag()); String* pattern = String::cast(pattern_regexp->DataAt(JSRegExp::kAtomPatternIndex)); int subject_len = subject->length(); int pattern_len = pattern->length(); - int replacement_len = (replacement.is_null()) ? 0 : replacement->length(); + int replacement_len = replacement->length(); FindStringIndicesDispatch(isolate, *subject, pattern, &indices, 0xffffffff); @@ -2911,13 +2911,15 @@ MUST_USE_RESULT static MaybeObject* StringReplaceStringWithString( for (int i = 0; i < matches; i++) { // Copy non-matched subject content. - String::WriteToFlat(*subject, - result->GetChars() + result_pos, - subject_pos, - indices.at(i)); - result_pos += indices.at(i) - subject_pos; - // Replace match. + if (subject_pos < indices.at(i)) { + String::WriteToFlat(*subject, + result->GetChars() + result_pos, + subject_pos, + indices.at(i)); + result_pos += indices.at(i) - subject_pos; + } + // Replace match. if (replacement_len > 0) { String::WriteToFlat(*replacement, result->GetChars() + result_pos, @@ -2928,10 +2930,13 @@ MUST_USE_RESULT static MaybeObject* StringReplaceStringWithString( subject_pos = indices.at(i) + pattern_len; } - String::WriteToFlat(*subject, - result->GetChars() + result_pos, - subject_pos, - subject_len); + // Add remaining subject content at the end. + if (subject_pos < subject_len) { + String::WriteToFlat(*subject, + result->GetChars() + result_pos, + subject_pos, + subject_len); + } return *result; } @@ -3077,12 +3082,13 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithEmptyString( // Shortcut for simple non-regexp global replacements if (regexp_handle->GetFlags().is_global() && regexp_handle->TypeTag() == JSRegExp::ATOM) { + Handle empty_string_handle(HEAP->empty_string()); if (subject_handle->HasOnlyAsciiChars()) { return StringReplaceStringWithString( - isolate, subject_handle, regexp_handle); + isolate, subject_handle, regexp_handle, empty_string_handle); } else { return StringReplaceStringWithString( - isolate, subject_handle, regexp_handle); + isolate, subject_handle, regexp_handle, empty_string_handle); } } -- 2.7.4