| Index: runtime/vm/object.h
|
| ===================================================================
|
| --- runtime/vm/object.h (revision 14314)
|
| +++ runtime/vm/object.h (working copy)
|
| @@ -3626,13 +3626,12 @@
|
|
|
| static const intptr_t kOneByteChar = 1;
|
| static const intptr_t kTwoByteChar = 2;
|
| - static const intptr_t kFourByteChar = 4;
|
|
|
| // All strings share the same maximum element count to keep things
|
| // simple. We choose a value that will prevent integer overflow for
|
| - // 4 byte strings, since it is the worst case.
|
| + // 2 byte strings, since it is the worst case.
|
| static const intptr_t kSizeofRawString = sizeof(RawObject) + (2 * kWordSize);
|
| - static const intptr_t kMaxElements = kSmiMax / kFourByteChar;
|
| + static const intptr_t kMaxElements = kSmiMax / kTwoByteChar;
|
|
|
| intptr_t Length() const { return Smi::Value(raw_ptr()->length_); }
|
| static intptr_t length_offset() { return OFFSET_OF(RawString, length_); }
|
| @@ -3673,33 +3672,45 @@
|
| return NULL;
|
| }
|
|
|
| - static RawString* New(const char* str, Heap::Space space = Heap::kNew);
|
| - static RawString* New(const uint8_t* characters,
|
| - intptr_t len,
|
| + void ToUTF8(uint8_t* utf8_array, intptr_t array_len) const;
|
| +
|
| + // Creates a new String object from a C string that is assumed to contain
|
| + // UTF-8 encoded characters and '\0' is considered a termination character.
|
| + static RawString* New(const char* cstr, Heap::Space space = Heap::kNew);
|
| +
|
| + // Creates a new String object from an array of UTF-8 encoded characters.
|
| + static RawString* New(const uint8_t* utf8_array,
|
| + intptr_t array_len,
|
| Heap::Space space = Heap::kNew);
|
| - static RawString* New(const uint16_t* characters,
|
| - intptr_t len,
|
| +
|
| + // Creates a new String object from an array of UTF-16 encoded characters.
|
| + static RawString* New(const uint16_t* utf16_array,
|
| + intptr_t array_len,
|
| Heap::Space space = Heap::kNew);
|
| - static RawString* New(const uint32_t* characters,
|
| - intptr_t len,
|
| +
|
| + // Creates a new String object from an array of UTF-32 encoded characters.
|
| + static RawString* New(const uint32_t* utf32_array,
|
| + intptr_t array_len,
|
| Heap::Space space = Heap::kNew);
|
| +
|
| + // Create a new String object from another Dart String instance.
|
| static RawString* New(const String& str, Heap::Space space = Heap::kNew);
|
|
|
| - static RawString* NewExternal(const uint8_t* characters,
|
| - intptr_t len,
|
| + // Creates a new External String object using the specified array of
|
| + // UTF-8 encoded characters as the external reference.
|
| + static RawString* NewExternal(const uint8_t* utf8_array,
|
| + intptr_t array_len,
|
| void* peer,
|
| Dart_PeerFinalizer callback,
|
| Heap::Space = Heap::kNew);
|
| - static RawString* NewExternal(const uint16_t* characters,
|
| - intptr_t len,
|
| +
|
| + // Creates a new External String object using the specified array of
|
| + // UTF-16 encoded characters as the external reference.
|
| + static RawString* NewExternal(const uint16_t* utf16_array,
|
| + intptr_t array_len,
|
| void* peer,
|
| Dart_PeerFinalizer callback,
|
| Heap::Space = Heap::kNew);
|
| - static RawString* NewExternal(const uint32_t* characters,
|
| - intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| - Heap::Space = Heap::kNew);
|
|
|
| static void Copy(const String& dst,
|
| intptr_t dst_offset,
|
| @@ -3711,10 +3722,6 @@
|
| intptr_t len);
|
| static void Copy(const String& dst,
|
| intptr_t dst_offset,
|
| - const uint32_t* characters,
|
| - intptr_t len);
|
| - static void Copy(const String& dst,
|
| - intptr_t dst_offset,
|
| const String& src,
|
| intptr_t src_offset,
|
| intptr_t len);
|
| @@ -3888,7 +3895,8 @@
|
| static RawTwoByteString* New(const uint16_t* characters,
|
| intptr_t len,
|
| Heap::Space space);
|
| - static RawTwoByteString* New(const uint32_t* characters,
|
| + static RawTwoByteString* New(intptr_t utf16_len,
|
| + const uint32_t* characters,
|
| intptr_t len,
|
| Heap::Space space);
|
| static RawTwoByteString* New(const TwoByteString& str,
|
| @@ -3917,64 +3925,6 @@
|
| };
|
|
|
|
|
| -class FourByteString : public String {
|
| - public:
|
| - virtual int32_t CharAt(intptr_t index) const {
|
| - return *CharAddr(index);
|
| - }
|
| -
|
| - virtual intptr_t CharSize() const {
|
| - return kFourByteChar;
|
| - }
|
| -
|
| - RawFourByteString* EscapeSpecialCharacters(bool raw_str) const;
|
| -
|
| - static const intptr_t kBytesPerElement = 4;
|
| - static const intptr_t kMaxElements = String::kMaxElements;
|
| -
|
| - static intptr_t InstanceSize() {
|
| - ASSERT(sizeof(RawFourByteString) == OFFSET_OF(RawFourByteString, data_));
|
| - return 0;
|
| - }
|
| -
|
| - static intptr_t InstanceSize(intptr_t len) {
|
| - ASSERT(sizeof(RawTwoByteString) == kSizeofRawString);
|
| - ASSERT(0 <= len && len <= kMaxElements);
|
| - return RoundedAllocationSize(
|
| - sizeof(RawFourByteString) + (len * kBytesPerElement));
|
| - }
|
| -
|
| - static RawFourByteString* New(intptr_t len,
|
| - Heap::Space space);
|
| - static RawFourByteString* New(const uint32_t* characters,
|
| - intptr_t len,
|
| - Heap::Space space);
|
| - static RawFourByteString* New(const FourByteString& str,
|
| - Heap::Space space);
|
| -
|
| - static RawFourByteString* Concat(const String& str1,
|
| - const String& str2,
|
| - Heap::Space space);
|
| - static RawFourByteString* ConcatAll(const Array& strings,
|
| - intptr_t len,
|
| - Heap::Space space);
|
| -
|
| - static RawFourByteString* Transform(int32_t (*mapping)(int32_t ch),
|
| - const String& str,
|
| - Heap::Space space);
|
| -
|
| - private:
|
| - uint32_t* CharAddr(intptr_t index) const {
|
| - ASSERT((index >= 0) && (index < Length()));
|
| - return &raw_ptr()->data_[index];
|
| - }
|
| -
|
| - HEAP_OBJECT_IMPLEMENTATION(FourByteString, String);
|
| - friend class Class;
|
| - friend class String;
|
| -};
|
| -
|
| -
|
| class ExternalOneByteString : public String {
|
| public:
|
| virtual int32_t CharAt(intptr_t index) const {
|
| @@ -4071,54 +4021,6 @@
|
| };
|
|
|
|
|
| -class ExternalFourByteString : public String {
|
| - public:
|
| - virtual int32_t CharAt(intptr_t index) const {
|
| - return *CharAddr(index);
|
| - }
|
| -
|
| - virtual intptr_t CharSize() const {
|
| - return kFourByteChar;
|
| - }
|
| -
|
| - virtual bool IsExternal() const { return true; }
|
| - virtual void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| - }
|
| -
|
| - // We use the same maximum elements for all strings.
|
| - static const intptr_t kBytesPerElement = 4;
|
| - static const intptr_t kMaxElements = String::kMaxElements;
|
| -
|
| - static intptr_t InstanceSize() {
|
| - return RoundedAllocationSize(sizeof(RawExternalFourByteString));
|
| - }
|
| -
|
| - static RawExternalFourByteString* New(const uint32_t* characters,
|
| - intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| - Heap::Space space = Heap::kNew);
|
| -
|
| - private:
|
| - const uint32_t* CharAddr(intptr_t index) const {
|
| - // TODO(iposva): Determine if we should throw an exception here.
|
| - ASSERT((index >= 0) && (index < Length()));
|
| - return &(raw_ptr()->external_data_->data()[index]);
|
| - }
|
| -
|
| - void SetExternalData(ExternalStringData<uint32_t>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| - }
|
| -
|
| - static void Finalize(Dart_Handle handle, void* peer);
|
| -
|
| - HEAP_OBJECT_IMPLEMENTATION(ExternalFourByteString, String);
|
| - friend class Class;
|
| - friend class String;
|
| -};
|
| -
|
| -
|
| // Class Bool implements Dart core class bool.
|
| class Bool : public Instance {
|
| public:
|
|
|