| Index: runtime/vm/object.h
|
| diff --git a/runtime/vm/object.h b/runtime/vm/object.h
|
| index 13e4c1f1d2377c943bd47240b28e3a01767e782a..266329981e19ac8e12ac613fc402b92b9d54cb4d 100644
|
| --- a/runtime/vm/object.h
|
| +++ b/runtime/vm/object.h
|
| @@ -2696,8 +2696,6 @@ class Double : public Number {
|
| // String may not be '\0' terminated.
|
| class String : public Instance {
|
| public:
|
| - typedef void (*PeerFinalizer)(void *peer);
|
| -
|
| // We use 30 bits for the hash code so that we consistently use a
|
| // 32bit Smi representation for the hash code on all architectures.
|
| static const intptr_t kHashBits = 30;
|
| @@ -2766,17 +2764,17 @@ class String : public Instance {
|
| static RawString* NewExternal(const uint8_t* characters,
|
| intptr_t len,
|
| void* peer,
|
| - PeerFinalizer callback,
|
| + Dart_PeerFinalizer callback,
|
| Heap::Space = Heap::kNew);
|
| static RawString* NewExternal(const uint16_t* characters,
|
| intptr_t len,
|
| void* peer,
|
| - PeerFinalizer callback,
|
| + Dart_PeerFinalizer callback,
|
| Heap::Space = Heap::kNew);
|
| static RawString* NewExternal(const uint32_t* characters,
|
| intptr_t len,
|
| void* peer,
|
| - PeerFinalizer callback,
|
| + Dart_PeerFinalizer callback,
|
| Heap::Space = Heap::kNew);
|
|
|
| static void Copy(const String& dst,
|
| @@ -3030,7 +3028,7 @@ class ExternalOneByteString : public String {
|
|
|
| virtual bool IsExternal() const { return true; }
|
| virtual void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer_;
|
| + return raw_ptr()->external_data_->peer();
|
| }
|
|
|
| static intptr_t InstanceSize() {
|
| @@ -3040,20 +3038,22 @@ class ExternalOneByteString : public String {
|
| static RawExternalOneByteString* New(const uint8_t* characters,
|
| intptr_t len,
|
| void* peer,
|
| - PeerFinalizer callback,
|
| + Dart_PeerFinalizer callback,
|
| Heap::Space space);
|
|
|
| private:
|
| const uint8_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]);
|
| + return &(raw_ptr()->external_data_->data()[index]);
|
| }
|
|
|
| void SetExternalData(ExternalStringData<uint8_t>* data) {
|
| raw_ptr()->external_data_ = data;
|
| }
|
|
|
| + static void Finalize(Dart_Handle handle, void* peer);
|
| +
|
| HEAP_OBJECT_IMPLEMENTATION(ExternalOneByteString, String);
|
| friend class Class;
|
| friend class String;
|
| @@ -3072,7 +3072,7 @@ class ExternalTwoByteString : public String {
|
|
|
| virtual bool IsExternal() const { return true; }
|
| virtual void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer_;
|
| + return raw_ptr()->external_data_->peer();
|
| }
|
|
|
| static intptr_t InstanceSize() {
|
| @@ -3082,20 +3082,22 @@ class ExternalTwoByteString : public String {
|
| static RawExternalTwoByteString* New(const uint16_t* characters,
|
| intptr_t len,
|
| void* peer,
|
| - PeerFinalizer callback,
|
| + Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| const uint16_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]);
|
| + return &(raw_ptr()->external_data_->data()[index]);
|
| }
|
|
|
| void SetExternalData(ExternalStringData<uint16_t>* data) {
|
| raw_ptr()->external_data_ = data;
|
| }
|
|
|
| + static void Finalize(Dart_Handle handle, void* peer);
|
| +
|
| HEAP_OBJECT_IMPLEMENTATION(ExternalTwoByteString, String);
|
| friend class Class;
|
| friend class String;
|
| @@ -3114,7 +3116,7 @@ class ExternalFourByteString : public String {
|
|
|
| virtual bool IsExternal() const { return true; }
|
| virtual void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer_;
|
| + return raw_ptr()->external_data_->peer();
|
| }
|
|
|
| static intptr_t InstanceSize() {
|
| @@ -3124,20 +3126,22 @@ class ExternalFourByteString : public String {
|
| static RawExternalFourByteString* New(const uint32_t* characters,
|
| intptr_t len,
|
| void* peer,
|
| - PeerFinalizer callback,
|
| + 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]);
|
| + 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;
|
| @@ -3381,6 +3385,10 @@ class ExternalByteArray : public ByteArray {
|
| return Smi::Value(raw_ptr()->length_);
|
| }
|
|
|
| + void* GetPeer() const {
|
| + return raw_ptr()->external_data_->peer();
|
| + }
|
| +
|
| template<typename T>
|
| T At(intptr_t byte_offset) const {
|
| T* addr = Addr<T>(byte_offset);
|
| @@ -3413,6 +3421,8 @@ class ExternalByteArray : public ByteArray {
|
|
|
| static RawExternalByteArray* New(uint8_t* data,
|
| intptr_t len,
|
| + void* peer,
|
| + Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| @@ -3425,7 +3435,7 @@ class ExternalByteArray : public ByteArray {
|
| intptr_t limit = byte_offset + sizeof(T);
|
| // TODO(iposva): Determine if we should throw an exception here.
|
| ASSERT((byte_offset >= 0) && (limit <= Length()));
|
| - uint8_t* addr = &raw_ptr()->data_[byte_offset];
|
| + uint8_t* addr = &raw_ptr()->external_data_->data()[byte_offset];
|
| return reinterpret_cast<T*>(addr);
|
| }
|
|
|
| @@ -3433,10 +3443,12 @@ class ExternalByteArray : public ByteArray {
|
| raw_ptr()->length_ = Smi::New(value);
|
| }
|
|
|
| - void SetData(uint8_t* data) const {
|
| - raw_ptr()->data_ = data;
|
| + void SetExternalData(ExternalByteArrayData* data) {
|
| + raw_ptr()->external_data_ = data;
|
| }
|
|
|
| + static void Finalize(Dart_Handle handle, void* peer);
|
| +
|
| HEAP_OBJECT_IMPLEMENTATION(ExternalByteArray, ByteArray);
|
| friend class Class;
|
| };
|
|
|