Commit f877f7bd authored by yangguo@chromium.org's avatar yangguo@chromium.org

Fixing presubmit error.

Review URL: http://codereview.chromium.org/7839031

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9181 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent bee91360
...@@ -2507,7 +2507,7 @@ class ReplacementStringBuilder { ...@@ -2507,7 +2507,7 @@ class ReplacementStringBuilder {
class CompiledReplacement { class CompiledReplacement {
public: public:
CompiledReplacement() CompiledReplacement()
: parts_(1), replacement_substrings_(0) {} : parts_(1), replacement_substrings_(0), simple_hint_(false) {}
void Compile(Handle<String> replacement, void Compile(Handle<String> replacement,
int capture_count, int capture_count,
...@@ -2523,6 +2523,10 @@ class CompiledReplacement { ...@@ -2523,6 +2523,10 @@ class CompiledReplacement {
return parts_.length(); return parts_.length();
} }
bool simple_hint() {
return simple_hint_;
}
private: private:
enum PartType { enum PartType {
SUBJECT_PREFIX = 1, SUBJECT_PREFIX = 1,
...@@ -2581,15 +2585,17 @@ class CompiledReplacement { ...@@ -2581,15 +2585,17 @@ class CompiledReplacement {
}; };
template<typename Char> template<typename Char>
static void ParseReplacementPattern(ZoneList<ReplacementPart>* parts, static bool ParseReplacementPattern(ZoneList<ReplacementPart>* parts,
Vector<Char> characters, Vector<Char> characters,
int capture_count, int capture_count,
int subject_length) { int subject_length) {
int length = characters.length(); int length = characters.length();
int last = 0; int last = 0;
bool simple = true;
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
Char c = characters[i]; Char c = characters[i];
if (c == '$') { if (c == '$') {
simple = false;
int next_index = i + 1; int next_index = i + 1;
if (next_index == length) { // No next character! if (next_index == length) { // No next character!
break; break;
...@@ -2682,10 +2688,12 @@ class CompiledReplacement { ...@@ -2682,10 +2688,12 @@ class CompiledReplacement {
parts->Add(ReplacementPart::ReplacementSubString(last, length)); parts->Add(ReplacementPart::ReplacementSubString(last, length));
} }
} }
return simple;
} }
ZoneList<ReplacementPart> parts_; ZoneList<ReplacementPart> parts_;
ZoneList<Handle<String> > replacement_substrings_; ZoneList<Handle<String> > replacement_substrings_;
bool simple_hint_;
}; };
...@@ -2697,16 +2705,16 @@ void CompiledReplacement::Compile(Handle<String> replacement, ...@@ -2697,16 +2705,16 @@ void CompiledReplacement::Compile(Handle<String> replacement,
String::FlatContent content = replacement->GetFlatContent(); String::FlatContent content = replacement->GetFlatContent();
ASSERT(content.IsFlat()); ASSERT(content.IsFlat());
if (content.IsAscii()) { if (content.IsAscii()) {
ParseReplacementPattern(&parts_, simple_hint_ = ParseReplacementPattern(&parts_,
content.ToAsciiVector(), content.ToAsciiVector(),
capture_count, capture_count,
subject_length); subject_length);
} else { } else {
ASSERT(content.IsTwoByte()); ASSERT(content.IsTwoByte());
ParseReplacementPattern(&parts_, simple_hint_ = ParseReplacementPattern(&parts_,
content.ToUC16Vector(), content.ToUC16Vector(),
capture_count, capture_count,
subject_length); subject_length);
} }
} }
Isolate* isolate = replacement->GetIsolate(); Isolate* isolate = replacement->GetIsolate();
...@@ -2901,7 +2909,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceStringWithString( ...@@ -2901,7 +2909,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceStringWithString(
isolate->factory()->NewRawTwoByteString(result_len)); isolate->factory()->NewRawTwoByteString(result_len));
} }
for(int i = 0; i < matches; i++) { for (int i = 0; i < matches; i++) {
// Copy non-matched subject content. // Copy non-matched subject content.
String::WriteToFlat(*subject, String::WriteToFlat(*subject,
result->GetChars() + result_pos, result->GetChars() + result_pos,
...@@ -2969,7 +2977,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithString( ...@@ -2969,7 +2977,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithString(
// Shortcut for simple non-regexp global replacements // Shortcut for simple non-regexp global replacements
if (is_global && if (is_global &&
regexp->TypeTag() == JSRegExp::ATOM && regexp->TypeTag() == JSRegExp::ATOM &&
compiled_replacement.parts() == 1) { compiled_replacement.simple_hint()) {
if (subject_handle->HasOnlyAsciiChars() && if (subject_handle->HasOnlyAsciiChars() &&
replacement_handle->HasOnlyAsciiChars()) { replacement_handle->HasOnlyAsciiChars()) {
return StringReplaceStringWithString<SeqAsciiString>( return StringReplaceStringWithString<SeqAsciiString>(
......
...@@ -207,3 +207,8 @@ replaceTest("[ab-aabb-ab-b][az-aazz-az-z]", ...@@ -207,3 +207,8 @@ replaceTest("[ab-aabb-ab-b][az-aazz-az-z]",
replaceTest("[ab-aabb-ab-b][az-aazz-az-z]", replaceTest("[ab-aabb-ab-b][az-aazz-az-z]",
"abaz", /a(.)/g, replacer); "abaz", /a(.)/g, replacer);
var str = 'She sells seashells by the seashore.';
var re = /sh/g;
assertEquals('She sells sea$schells by the sea$schore.',
str.replace(re,"$$" + 'sch'))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment