Commit 5ac2a5d2 authored by yangguo@chromium.org's avatar yangguo@chromium.org

Revert r12430, r12432, r12433 (basic support for Latin1).

BUG=

Review URL: https://chromiumcodereview.appspot.com/10905075

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12438 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 0c24942b
This diff is collapsed.
This diff is collapsed.
...@@ -204,23 +204,10 @@ Handle<String> Factory::NewStringFromAscii(Vector<const char> string, ...@@ -204,23 +204,10 @@ Handle<String> Factory::NewStringFromAscii(Vector<const char> string,
} }
Handle<String> Factory::NewStringFromUtf8(Vector<const char> string, Handle<String> Factory::NewStringFromUtf8(Vector<const char> string,
PretenureFlag pretenure, PretenureFlag pretenure) {
String::AsciiHint ascii_hint) {
CALL_HEAP_FUNCTION( CALL_HEAP_FUNCTION(
isolate(), isolate(),
isolate()->heap()->AllocateStringFromUtf8( isolate()->heap()->AllocateStringFromUtf8(string, pretenure),
string, pretenure, ascii_hint),
String);
}
Handle<String> Factory::NewStringFromLatin1(Vector<const char> string,
PretenureFlag pretenure,
String::AsciiHint ascii_hint) {
CALL_HEAP_FUNCTION(
isolate(),
isolate()->heap()->AllocateStringFromLatin1(
string, pretenure, ascii_hint),
String); String);
} }
......
...@@ -120,13 +120,7 @@ class Factory { ...@@ -120,13 +120,7 @@ class Factory {
// flags in the parser. // flags in the parser.
Handle<String> NewStringFromUtf8( Handle<String> NewStringFromUtf8(
Vector<const char> str, Vector<const char> str,
PretenureFlag pretenure = NOT_TENURED, PretenureFlag pretenure = NOT_TENURED);
String::AsciiHint ascii_hint = String::MAYBE_ASCII);
Handle<String> NewStringFromLatin1(
Vector<const char> str,
PretenureFlag pretenure = NOT_TENURED,
String::AsciiHint ascii_hint = String::MAYBE_ASCII);
Handle<String> NewStringFromTwoByte( Handle<String> NewStringFromTwoByte(
Vector<const uc16> str, Vector<const uc16> str,
......
...@@ -83,14 +83,9 @@ void PromotionQueue::ActivateGuardIfOnTheSamePage() { ...@@ -83,14 +83,9 @@ void PromotionQueue::ActivateGuardIfOnTheSamePage() {
MaybeObject* Heap::AllocateStringFromUtf8(Vector<const char> str, MaybeObject* Heap::AllocateStringFromUtf8(Vector<const char> str,
PretenureFlag pretenure, PretenureFlag pretenure) {
String::AsciiHint ascii_hint) { // Check for ASCII first since this is the common case.
if ((ascii_hint == String::MAYBE_ASCII && if (String::IsAscii(str.start(), str.length())) {
String::IsAscii(str.start(), str.length())) ||
ascii_hint == String::ASCII) {
// Assert that the ASCII-hint is correct.
ASSERT(ascii_hint != String::ASCII ||
String::IsAscii(str.start(), str.length()));
// If the string is ASCII, we do not need to convert the characters // If the string is ASCII, we do not need to convert the characters
// since UTF8 is backwards compatible with ASCII. // since UTF8 is backwards compatible with ASCII.
return AllocateStringFromAscii(str, pretenure); return AllocateStringFromAscii(str, pretenure);
...@@ -100,24 +95,6 @@ MaybeObject* Heap::AllocateStringFromUtf8(Vector<const char> str, ...@@ -100,24 +95,6 @@ MaybeObject* Heap::AllocateStringFromUtf8(Vector<const char> str,
} }
MaybeObject* Heap::AllocateStringFromLatin1(Vector<const char> str,
PretenureFlag pretenure,
String::AsciiHint ascii_hint) {
if ((ascii_hint == String::MAYBE_ASCII &&
String::IsAscii(str.start(), str.length())) ||
ascii_hint == String::ASCII) {
// Assert that the strict ASCII-hint is correct.
ASSERT(ascii_hint != String::ASCII ||
String::IsAscii(str.start(), str.length()));
// If the string is ASCII, we do not need to convert the characters
// since Latin1 is backwards compatible with ASCII.
return AllocateStringFromAscii(str, pretenure);
}
// Non-ASCII and we need to decode.
return AllocateStringFromLatin1Slow(str, pretenure);
}
MaybeObject* Heap::AllocateSymbol(Vector<const char> str, MaybeObject* Heap::AllocateSymbol(Vector<const char> str,
int chars, int chars,
uint32_t hash_field) { uint32_t hash_field) {
......
...@@ -48,7 +48,6 @@ ...@@ -48,7 +48,6 @@
#include "snapshot.h" #include "snapshot.h"
#include "store-buffer.h" #include "store-buffer.h"
#include "v8threads.h" #include "v8threads.h"
#include "v8utils.h"
#include "vm-state-inl.h" #include "vm-state-inl.h"
#if V8_TARGET_ARCH_ARM && !V8_INTERPRETED_REGEXP #if V8_TARGET_ARCH_ARM && !V8_INTERPRETED_REGEXP
#include "regexp-macro-assembler.h" #include "regexp-macro-assembler.h"
...@@ -4391,8 +4390,7 @@ MaybeObject* Heap::ReinitializeJSGlobalProxy(JSFunction* constructor, ...@@ -4391,8 +4390,7 @@ MaybeObject* Heap::ReinitializeJSGlobalProxy(JSFunction* constructor,
MaybeObject* Heap::AllocateStringFromAscii(Vector<const char> string, MaybeObject* Heap::AllocateStringFromAscii(Vector<const char> string,
PretenureFlag pretenure) { PretenureFlag pretenure) {
int length = string.length(); if (string.length() == 1) {
if (length == 1) {
return Heap::LookupSingleCharacterStringFromCode(string[0]); return Heap::LookupSingleCharacterStringFromCode(string[0]);
} }
Object* result; Object* result;
...@@ -4401,10 +4399,11 @@ MaybeObject* Heap::AllocateStringFromAscii(Vector<const char> string, ...@@ -4401,10 +4399,11 @@ MaybeObject* Heap::AllocateStringFromAscii(Vector<const char> string,
if (!maybe_result->ToObject(&result)) return maybe_result; if (!maybe_result->ToObject(&result)) return maybe_result;
} }
isolate_->counters()->string_length_ascii()->Increment(length);
// Copy the characters into the new object. // Copy the characters into the new object.
CopyChars(SeqAsciiString::cast(result)->GetChars(), string.start(), length); SeqAsciiString* string_result = SeqAsciiString::cast(result);
for (int i = 0; i < string.length(); i++) {
string_result->SeqAsciiStringSet(i, string[i]);
}
return result; return result;
} }
...@@ -4431,63 +4430,41 @@ MaybeObject* Heap::AllocateStringFromUtf8Slow(Vector<const char> string, ...@@ -4431,63 +4430,41 @@ MaybeObject* Heap::AllocateStringFromUtf8Slow(Vector<const char> string,
if (!maybe_result->ToObject(&result)) return maybe_result; if (!maybe_result->ToObject(&result)) return maybe_result;
} }
isolate_->counters()->string_length_utf8()->Increment(chars);
// Convert and copy the characters into the new object. // Convert and copy the characters into the new object.
SeqTwoByteString* twobyte = SeqTwoByteString::cast(result); String* string_result = String::cast(result);
decoder->Reset(string.start(), string.length()); decoder->Reset(string.start(), string.length());
int i = 0; int i = 0;
while (i < chars) { while (i < chars) {
uint32_t r = decoder->GetNext(); uint32_t r = decoder->GetNext();
if (r > unibrow::Utf16::kMaxNonSurrogateCharCode) { if (r > unibrow::Utf16::kMaxNonSurrogateCharCode) {
twobyte->SeqTwoByteStringSet(i++, unibrow::Utf16::LeadSurrogate(r)); string_result->Set(i++, unibrow::Utf16::LeadSurrogate(r));
twobyte->SeqTwoByteStringSet(i++, unibrow::Utf16::TrailSurrogate(r)); string_result->Set(i++, unibrow::Utf16::TrailSurrogate(r));
} else { } else {
twobyte->SeqTwoByteStringSet(i++, r); string_result->Set(i++, r);
} }
} }
return result; return result;
} }
MaybeObject* Heap::AllocateStringFromLatin1Slow(Vector<const char> string,
PretenureFlag pretenure) {
int chars = string.length();
Object* result;
{ MaybeObject* maybe_result = AllocateRawTwoByteString(chars, pretenure);
if (!maybe_result->ToObject(&result)) return maybe_result;
}
isolate_->counters()->string_length_latin1()->Increment(chars);
// Convert and copy the characters into the new object.
SeqTwoByteString* string_result = SeqTwoByteString::cast(result);
CopyChars(string_result->GetChars(),
reinterpret_cast<const unsigned char*>(string.start()),
chars);
return result;
}
MaybeObject* Heap::AllocateStringFromTwoByte(Vector<const uc16> string, MaybeObject* Heap::AllocateStringFromTwoByte(Vector<const uc16> string,
PretenureFlag pretenure) { PretenureFlag pretenure) {
// Check if the string is an ASCII string. // Check if the string is an ASCII string.
Object* result; MaybeObject* maybe_result;
int length = string.length(); if (String::IsAscii(string.start(), string.length())) {
const uc16* start = string.start(); maybe_result = AllocateRawAsciiString(string.length(), pretenure);
if (String::IsAscii(start, length)) {
MaybeObject* maybe_result = AllocateRawAsciiString(length, pretenure);
if (!maybe_result->ToObject(&result)) return maybe_result;
isolate_->counters()->string_length_ascii()->Increment(length);
CopyChars(SeqAsciiString::cast(result)->GetChars(), start, length);
} else { // It's not an ASCII string. } else { // It's not an ASCII string.
MaybeObject* maybe_result = AllocateRawTwoByteString(length, pretenure); maybe_result = AllocateRawTwoByteString(string.length(), pretenure);
if (!maybe_result->ToObject(&result)) return maybe_result;
isolate_->counters()->string_length_utf16()->Increment(length);
CopyChars(SeqTwoByteString::cast(result)->GetChars(), start, length);
} }
Object* result;
if (!maybe_result->ToObject(&result)) return maybe_result;
// Copy the characters into the new object, which may be either ASCII or
// UTF-16.
String* string_result = String::cast(result);
for (int i = 0; i < string.length(); i++) {
string_result->Set(i, string[i]);
}
return result; return result;
} }
......
...@@ -678,17 +678,9 @@ class Heap { ...@@ -678,17 +678,9 @@ class Heap {
Vector<const char> str, Vector<const char> str,
PretenureFlag pretenure = NOT_TENURED); PretenureFlag pretenure = NOT_TENURED);
MUST_USE_RESULT inline MaybeObject* AllocateStringFromUtf8( MUST_USE_RESULT inline MaybeObject* AllocateStringFromUtf8(
Vector<const char> str,
PretenureFlag pretenure = NOT_TENURED,
String::AsciiHint ascii_hint = String::MAYBE_ASCII);
MUST_USE_RESULT MaybeObject* AllocateStringFromUtf8Slow(
Vector<const char> str, Vector<const char> str,
PretenureFlag pretenure = NOT_TENURED); PretenureFlag pretenure = NOT_TENURED);
MUST_USE_RESULT inline MaybeObject* AllocateStringFromLatin1( MUST_USE_RESULT MaybeObject* AllocateStringFromUtf8Slow(
Vector<const char> str,
PretenureFlag pretenure = NOT_TENURED,
String::AsciiHint ascii_hint = String::MAYBE_ASCII);
MUST_USE_RESULT MaybeObject* AllocateStringFromLatin1Slow(
Vector<const char> str, Vector<const char> str,
PretenureFlag pretenure = NOT_TENURED); PretenureFlag pretenure = NOT_TENURED);
MUST_USE_RESULT MaybeObject* AllocateStringFromTwoByte( MUST_USE_RESULT MaybeObject* AllocateStringFromTwoByte(
......
...@@ -7128,10 +7128,6 @@ class String: public HeapObject { ...@@ -7128,10 +7128,6 @@ class String: public HeapObject {
friend class String; friend class String;
}; };
enum AsciiHint { MAYBE_ASCII = 0,
ASCII = 1,
NOT_ASCII = 2 };
// Get and set the length of the string. // Get and set the length of the string.
inline int length(); inline int length();
inline void set_length(int value); inline void set_length(int value);
......
...@@ -252,10 +252,6 @@ namespace internal { ...@@ -252,10 +252,6 @@ namespace internal {
SC(string_add_make_two_char, V8.StringAddMakeTwoChar) \ SC(string_add_make_two_char, V8.StringAddMakeTwoChar) \
SC(string_compare_native, V8.StringCompareNative) \ SC(string_compare_native, V8.StringCompareNative) \
SC(string_compare_runtime, V8.StringCompareRuntime) \ SC(string_compare_runtime, V8.StringCompareRuntime) \
SC(string_length_utf8, V8.StringLengthUtf8) \
SC(string_length_ascii, V8.StringLengthAScii) \
SC(string_length_latin1, V8.StringLengthLatin1) \
SC(string_length_utf16, V8.StringLengthUtf16) \
SC(regexp_entry_runtime, V8.RegExpEntryRuntime) \ SC(regexp_entry_runtime, V8.RegExpEntryRuntime) \
SC(regexp_entry_native, V8.RegExpEntryNative) \ SC(regexp_entry_native, V8.RegExpEntryNative) \
SC(number_to_string_native, V8.NumberToStringNative) \ SC(number_to_string_native, V8.NumberToStringNative) \
......
This diff is collapsed.
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