From b230249a989473e394a4ff126e19e74afdf5e9ef Mon Sep 17 00:00:00 2001 From: "vitalyr@chromium.org" Date: Wed, 25 May 2011 17:07:05 +0000 Subject: [PATCH] Add fast cases for flat comparison to String::Is{Ascii,TwoByte}EqualTo. R=ager@chromium.org Review URL: http://codereview.chromium.org/7064017 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8065 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/objects.cc | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/objects.cc b/src/objects.cc index 1c4b7a8..292e753 100644 --- a/src/objects.cc +++ b/src/objects.cc @@ -5534,16 +5534,11 @@ bool String::IsEqualTo(Vector str) { bool String::IsAsciiEqualTo(Vector str) { int slen = length(); if (str.length() != slen) return false; - if (this->IsSeqAsciiString()) { - SeqAsciiString* seq = SeqAsciiString::cast(this); - char* ch = seq->GetChars(); - for (int i = 0; i < slen; i++, ch++) { - if (*ch != str[i]) return false; - } - } else { - for (int i = 0; i < slen; i++) { - if (Get(i) != static_cast(str[i])) return false; - } + if (IsFlat() && IsAsciiRepresentation()) { + return CompareChars(ToAsciiVector().start(), str.start(), slen) == 0; + } + for (int i = 0; i < slen; i++) { + if (Get(i) != static_cast(str[i])) return false; } return true; } @@ -5552,6 +5547,9 @@ bool String::IsAsciiEqualTo(Vector str) { bool String::IsTwoByteEqualTo(Vector str) { int slen = length(); if (str.length() != slen) return false; + if (IsFlat() && IsTwoByteRepresentation()) { + return CompareChars(ToUC16Vector().start(), str.start(), slen) == 0; + } for (int i = 0; i < slen; i++) { if (Get(i) != str[i]) return false; } -- 2.7.4