Force inline Stirng::GetCharVector<>.

R=mvstanton@chromium.org
BUG=chromium:436447

Review URL: https://codereview.chromium.org/756983003

Cr-Commit-Position: refs/heads/master@{#25504}
This commit is contained in:
yangguo 2014-11-25 07:29:50 -08:00 committed by Commit bot
parent f1d8668e38
commit 39d0b85430
4 changed files with 23 additions and 43 deletions

View File

@ -3581,6 +3581,22 @@ ConsString* String::VisitFlat(Visitor* visitor,
}
template <>
inline Vector<const uint8_t> String::GetCharVector() {
String::FlatContent flat = GetFlatContent();
DCHECK(flat.IsOneByte());
return flat.ToOneByteVector();
}
template <>
inline Vector<const uc16> String::GetCharVector() {
String::FlatContent flat = GetFlatContent();
DCHECK(flat.IsTwoByte());
return flat.ToUC16Vector();
}
uint16_t SeqOneByteString::SeqOneByteStringGet(int index) {
DCHECK(index >= 0 && index < length());
return READ_BYTE_FIELD(this, kHeaderSize + index * kCharSize);

View File

@ -8298,22 +8298,6 @@ String::FlatContent String::GetFlatContent() {
}
template <>
Vector<const uint8_t> String::GetCharVector() {
String::FlatContent flat = GetFlatContent();
DCHECK(flat.IsOneByte());
return flat.ToOneByteVector();
}
template <>
Vector<const uc16> String::GetCharVector() {
String::FlatContent flat = GetFlatContent();
DCHECK(flat.IsTwoByte());
return flat.ToUC16Vector();
}
SmartArrayPointer<char> String::ToCString(AllowNullsFlag allow_nulls,
RobustnessFlag robust_flag,
int offset,

View File

@ -8815,7 +8815,7 @@ class String: public Name {
};
template <typename Char>
Vector<const Char> GetCharVector();
INLINE(Vector<const Char> GetCharVector());
// Get and set the length of the string.
inline int length() const;

View File

@ -14,26 +14,6 @@
namespace v8 {
namespace internal {
template <typename Char>
static INLINE(Vector<const Char> GetCharVector(Handle<String> string));
template <>
Vector<const uint8_t> GetCharVector(Handle<String> string) {
String::FlatContent flat = string->GetFlatContent();
DCHECK(flat.IsOneByte());
return flat.ToOneByteVector();
}
template <>
Vector<const uc16> GetCharVector(Handle<String> string) {
String::FlatContent flat = string->GetFlatContent();
DCHECK(flat.IsTwoByte());
return flat.ToUC16Vector();
}
class URIUnescape : public AllStatic {
public:
template <typename Char>
@ -72,7 +52,7 @@ MaybeHandle<String> URIUnescape::Unescape(Isolate* isolate,
{
DisallowHeapAllocation no_allocation;
StringSearch<uint8_t, Char> search(isolate, STATIC_CHAR_VECTOR("%"));
index = search.Search(GetCharVector<Char>(source), 0);
index = search.Search(source->GetCharVector<Char>(), 0);
if (index < 0) return source;
}
return UnescapeSlow<Char>(isolate, source, index);
@ -89,7 +69,7 @@ MaybeHandle<String> URIUnescape::UnescapeSlow(Isolate* isolate,
int unescaped_length = 0;
{
DisallowHeapAllocation no_allocation;
Vector<const Char> vector = GetCharVector<Char>(string);
Vector<const Char> vector = string->GetCharVector<Char>();
for (int i = start_index; i < length; unescaped_length++) {
int step;
if (UnescapeChar(vector, i, length, &step) >
@ -112,7 +92,7 @@ MaybeHandle<String> URIUnescape::UnescapeSlow(Isolate* isolate,
->NewRawOneByteString(unescaped_length)
.ToHandleChecked();
DisallowHeapAllocation no_allocation;
Vector<const Char> vector = GetCharVector<Char>(string);
Vector<const Char> vector = string->GetCharVector<Char>();
for (int i = start_index; i < length; dest_position++) {
int step;
dest->SeqOneByteStringSet(dest_position,
@ -125,7 +105,7 @@ MaybeHandle<String> URIUnescape::UnescapeSlow(Isolate* isolate,
->NewRawTwoByteString(unescaped_length)
.ToHandleChecked();
DisallowHeapAllocation no_allocation;
Vector<const Char> vector = GetCharVector<Char>(string);
Vector<const Char> vector = string->GetCharVector<Char>();
for (int i = start_index; i < length; dest_position++) {
int step;
dest->SeqTwoByteStringSet(dest_position,
@ -221,7 +201,7 @@ MaybeHandle<String> URIEscape::Escape(Isolate* isolate, Handle<String> string) {
{
DisallowHeapAllocation no_allocation;
Vector<const Char> vector = GetCharVector<Char>(string);
Vector<const Char> vector = string->GetCharVector<Char>();
for (int i = 0; i < length; i++) {
uint16_t c = vector[i];
if (c >= 256) {
@ -249,7 +229,7 @@ MaybeHandle<String> URIEscape::Escape(Isolate* isolate, Handle<String> string) {
{
DisallowHeapAllocation no_allocation;
Vector<const Char> vector = GetCharVector<Char>(string);
Vector<const Char> vector = string->GetCharVector<Char>();
for (int i = 0; i < length; i++) {
uint16_t c = vector[i];
if (c >= 256) {