| Index: include/v8.h
|
| diff --git a/include/v8.h b/include/v8.h
|
| index 42aaabf6664c8a93664b4468db5c87c16966cca2..3e1b42700bb5843804c0bcc61459efc2ac44b901 100644
|
| --- a/include/v8.h
|
| +++ b/include/v8.h
|
| @@ -1069,48 +1069,19 @@ class String : public Primitive {
|
| PRESERVE_ASCII_NULL = 4
|
| };
|
|
|
| -
|
| - enum StringEncoding {
|
| - INVALID_ENCODING = 0,
|
| - UTF_8_ENCODING = 1,
|
| - LATIN1_ENCODING = 2,
|
| - UTF_16_ENCODING = 3,
|
| -
|
| - ASCII_HINT = 1 << 16,
|
| - NOT_ASCII_HINT = 1 << 17
|
| - };
|
| -
|
| - static const int kStringEncodingMask = 3;
|
| - static const int kAsciiHintMask = String::ASCII_HINT | String::NOT_ASCII_HINT;
|
| -
|
| - static const int kUndefinedLength = -1;
|
| -
|
| -
|
| - // 16-bit UTF16 code units. PRESERVE_ASCII_NULL is not supported as option,
|
| - // null-characters are never converted to spaces.
|
| + // 16-bit character codes.
|
| V8EXPORT int Write(uint16_t* buffer,
|
| int start = 0,
|
| - int length = kUndefinedLength,
|
| + int length = -1,
|
| int options = NO_OPTIONS) const;
|
| -
|
| - // ASCII characters. Null-characters are converted to spaces unless
|
| - // PRESERVE_ASCII_NULL is set as option.
|
| + // ASCII characters.
|
| V8EXPORT int WriteAscii(char* buffer,
|
| int start = 0,
|
| - int length = kUndefinedLength,
|
| + int length = -1,
|
| int options = NO_OPTIONS) const;
|
| -
|
| - // Latin1 characters. PRESERVE_ASCII_NULL is not supported as option,
|
| - // null-characters are never converted to spaces.
|
| - V8EXPORT int WriteLatin1(char* buffer,
|
| - int start = 0,
|
| - int length = kUndefinedLength,
|
| - int options = NO_OPTIONS) const;
|
| -
|
| - // UTF-8 encoded characters. PRESERVE_ASCII_NULL is not supported as option,
|
| - // null-characters are never converted to spaces.
|
| + // UTF-8 encoded characters.
|
| V8EXPORT int WriteUtf8(char* buffer,
|
| - int length = kUndefinedLength,
|
| + int length = -1,
|
| int* nchars_ref = NULL,
|
| int options = NO_OPTIONS) const;
|
|
|
| @@ -1151,7 +1122,6 @@ class String : public Primitive {
|
| void operator=(const ExternalStringResourceBase&);
|
|
|
| friend class v8::internal::Heap;
|
| - friend class v8::String;
|
| };
|
|
|
| /**
|
| @@ -1211,16 +1181,6 @@ class String : public Primitive {
|
| };
|
|
|
| /**
|
| - * An ExternalLatin1StringResource is a wrapper around an Latin1-encoded
|
| - * string buffer that resides outside V8's heap. For usage in V8, a Latin1
|
| - * string is converted to ASCII or two-byte string depending on whether
|
| - * it contains non-ASCII characters.
|
| - */
|
| - class V8EXPORT ExternalLatin1StringResource
|
| - : public ExternalAsciiStringResource {
|
| - };
|
| -
|
| - /**
|
| * Get the ExternalStringResource for an external string. Returns
|
| * NULL if IsExternal() doesn't return true.
|
| */
|
| @@ -1233,44 +1193,24 @@ class String : public Primitive {
|
| V8EXPORT const ExternalAsciiStringResource* GetExternalAsciiStringResource()
|
| const;
|
|
|
| - /**
|
| - * If the string is external, return its encoding (Latin1 or UTF16)
|
| - * and possibly a hint on whether the content is ASCII.
|
| - * Return String::INVALID_ENCODING otherwise.
|
| - */
|
| - inline int GetExternalStringEncoding() const;
|
| -
|
| -
|
| - /**
|
| - * Return the resource of the external string regardless of encoding.
|
| - * Call this only after having made sure that the string is indeed external!
|
| - */
|
| - inline ExternalStringResourceBase* GetExternalStringResourceBase() const;
|
| -
|
| static inline String* Cast(v8::Value* obj);
|
|
|
| /**
|
| - * Allocates a new string from either UTF-8 or Latin1-encoded data.
|
| - * The second parameter 'length' gives the buffer length. If the data may
|
| - * contain zero bytes, the caller must be careful to supply the length
|
| - * parameter. If it is not given, the function calls 'strlen' to determine
|
| - * the buffer length, it might be wrong if 'data' contains a null character.
|
| - * The third parameter specifies the encoding, which may include an hint
|
| - * whether the string contains ASCII characters. In the case of Latin1, the
|
| - * appropriate internal representation (UTF16 or ASCII) is chosen.
|
| + * Allocates a new string from either UTF-8 encoded or ASCII data.
|
| + * The second parameter 'length' gives the buffer length.
|
| + * If the data is UTF-8 encoded, the caller must
|
| + * be careful to supply the length parameter.
|
| + * If it is not given, the function calls
|
| + * 'strlen' to determine the buffer length, it might be
|
| + * wrong if 'data' contains a null character.
|
| */
|
| - V8EXPORT static Local<String> New(const char* data,
|
| - int length = kUndefinedLength,
|
| - int encoding = UTF_8_ENCODING);
|
| + V8EXPORT static Local<String> New(const char* data, int length = -1);
|
|
|
| - /** Allocates a new string from 16-bit UTF-16 code units.*/
|
| - V8EXPORT static Local<String> New(const uint16_t* data,
|
| - int length = kUndefinedLength);
|
| + /** Allocates a new string from 16-bit character codes.*/
|
| + V8EXPORT static Local<String> New(const uint16_t* data, int length = -1);
|
|
|
| /** Creates a symbol. Returns one if it exists already.*/
|
| - V8EXPORT static Local<String> NewSymbol(const char* data,
|
| - int length = kUndefinedLength,
|
| - int encoding = UTF_8_ENCODING);
|
| + V8EXPORT static Local<String> NewSymbol(const char* data, int length = -1);
|
|
|
| /**
|
| * Creates a new string by concatenating the left and the right strings
|
| @@ -1307,8 +1247,7 @@ class String : public Primitive {
|
| * this function should not otherwise delete or modify the resource. Neither
|
| * should the underlying buffer be deallocated or modified except through the
|
| * destructor of the external string resource.
|
| - */
|
| - V8EXPORT static Local<String> NewExternal(
|
| + */ V8EXPORT static Local<String> NewExternal(
|
| ExternalAsciiStringResource* resource);
|
|
|
| /**
|
| @@ -1322,24 +1261,6 @@ class String : public Primitive {
|
| */
|
| V8EXPORT bool MakeExternal(ExternalAsciiStringResource* resource);
|
|
|
| -
|
| - /**
|
| - * Creates a new external string using the Latin1-encoded data defined in the
|
| - * given resource. When the external string is no longer live on V8's heap
|
| - * the resource will be disposed by calling its Dispose method. The caller of
|
| - * this function should not otherwise delete or modify the resource. Neither
|
| - * should the underlying buffer be deallocated or modified except through the
|
| - * destructor of the external string resource.
|
| - * If the data contains a non-ASCII character, the string is created as a new
|
| - * string object on the V8 heap and the Dispose method is called on the
|
| - * resource immediately. This is because V8 is unable to handle non-ASCII
|
| - * Latin1-encoded strings internally.
|
| - */
|
| - V8EXPORT static Local<String> NewExternal(
|
| - ExternalLatin1StringResource* resource,
|
| - int encoding = String::LATIN1_ENCODING);
|
| -
|
| -
|
| /**
|
| * Returns true if this string can be made external.
|
| */
|
| @@ -1347,13 +1268,11 @@ class String : public Primitive {
|
|
|
| /** Creates an undetectable string from the supplied ASCII or UTF-8 data.*/
|
| V8EXPORT static Local<String> NewUndetectable(const char* data,
|
| - int length = kUndefinedLength,
|
| - int encoding = UTF_8_ENCODING);
|
| + int length = -1);
|
|
|
| - /** Creates an undetectable string from the supplied 16-bit UTF16 code units.
|
| - */
|
| + /** Creates an undetectable string from the supplied 16-bit character codes.*/
|
| V8EXPORT static Local<String> NewUndetectable(const uint16_t* data,
|
| - int length = kUndefinedLength);
|
| + int length = -1);
|
|
|
| /**
|
| * Converts an object to a UTF-8-encoded character array. Useful if
|
| @@ -1424,9 +1343,7 @@ class String : public Primitive {
|
| };
|
|
|
| private:
|
| - V8EXPORT void VerifyExternalStringEncoding(int encoding) const;
|
| - V8EXPORT void VerifyExternalStringResourceBase(
|
| - ExternalStringResourceBase* val) const;
|
| + V8EXPORT void VerifyExternalStringResource(ExternalStringResource* val) const;
|
| V8EXPORT static void CheckCast(v8::Value* obj);
|
| };
|
|
|
| @@ -4117,9 +4034,6 @@ class Internals {
|
| static const int kJSObjectHeaderSize = 3 * kApiPointerSize;
|
| static const int kFullStringRepresentationMask = 0x07;
|
| static const int kExternalTwoByteRepresentationTag = 0x02;
|
| - static const int kExternalAsciiRepresentationTag = 0x06;
|
| - static const int kExternalAsciiDataHintMask = 0x08;
|
| - static const int kExternalAsciiDataHintTag = 0x08;
|
|
|
| static const int kIsolateStateOffset = 0;
|
| static const int kIsolateEmbedderDataOffset = 1 * kApiPointerSize;
|
| @@ -4177,6 +4091,11 @@ class Internals {
|
| }
|
| }
|
|
|
| + static inline bool IsExternalTwoByteString(int instance_type) {
|
| + int representation = (instance_type & kFullStringRepresentationMask);
|
| + return representation == kExternalTwoByteRepresentationTag;
|
| + }
|
| +
|
| static inline bool IsInitialized(v8::Isolate* isolate) {
|
| uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + kIsolateStateOffset;
|
| return *reinterpret_cast<int*>(addr) == 1;
|
| @@ -4454,56 +4373,16 @@ Local<String> String::Empty(Isolate* isolate) {
|
| String::ExternalStringResource* String::GetExternalStringResource() const {
|
| typedef internal::Object O;
|
| typedef internal::Internals I;
|
| - String::ExternalStringResource* result = NULL;
|
| O* obj = *reinterpret_cast<O**>(const_cast<String*>(this));
|
| - if ((I::GetInstanceType(obj) & I::kFullStringRepresentationMask) ==
|
| - I::kExternalTwoByteRepresentationTag) {
|
| - result = reinterpret_cast<String::ExternalStringResource*>(
|
| - GetExternalStringResourceBase());
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -
|
| -int String::GetExternalStringEncoding() const {
|
| - typedef internal::Object O;
|
| - typedef internal::Internals I;
|
| - O* obj = *reinterpret_cast<O**>(const_cast<String*>(this));
|
| - static const int kRepresentationAndHintMask =
|
| - I::kFullStringRepresentationMask | I::kExternalAsciiDataHintMask;
|
| -
|
| - int encoding;
|
| - switch (I::GetInstanceType(obj) & kRepresentationAndHintMask) {
|
| - case I::kExternalTwoByteRepresentationTag | I::kExternalAsciiDataHintTag:
|
| - encoding = UTF_16_ENCODING | ASCII_HINT;
|
| - break;
|
| - case I::kExternalTwoByteRepresentationTag:
|
| - encoding = UTF_16_ENCODING | NOT_ASCII_HINT;
|
| - break;
|
| - case I::kExternalAsciiRepresentationTag:
|
| - encoding = LATIN1_ENCODING | ASCII_HINT;
|
| - break;
|
| - default:
|
| - encoding = INVALID_ENCODING;
|
| - break;
|
| + String::ExternalStringResource* result;
|
| + if (I::IsExternalTwoByteString(I::GetInstanceType(obj))) {
|
| + void* value = I::ReadField<void*>(obj, I::kStringResourceOffset);
|
| + result = reinterpret_cast<String::ExternalStringResource*>(value);
|
| + } else {
|
| + result = NULL;
|
| }
|
| #ifdef V8_ENABLE_CHECKS
|
| - VerifyExternalStringEncoding(encoding);
|
| -#endif
|
| - return encoding;
|
| -}
|
| -
|
| -
|
| -String::ExternalStringResourceBase* String::GetExternalStringResourceBase()
|
| - const {
|
| - typedef internal::Object O;
|
| - typedef internal::Internals I;
|
| - O* obj = *reinterpret_cast<O**>(const_cast<String*>(this));
|
| - void* value = I::ReadField<void*>(obj, I::kStringResourceOffset);
|
| - ExternalStringResourceBase* result =
|
| - reinterpret_cast<String::ExternalStringResourceBase*>(value);
|
| -#ifdef V8_ENABLE_CHECKS
|
| - VerifyExternalStringResourceBase(result);
|
| + VerifyExternalStringResource(result);
|
| #endif
|
| return result;
|
| }
|
|
|