| Index: runtime/vm/object.h
|
| ===================================================================
|
| --- runtime/vm/object.h (revision 17875)
|
| +++ runtime/vm/object.h (working copy)
|
| @@ -30,6 +30,7 @@
|
| class Closure;
|
| class Code;
|
| class DeoptInstr;
|
| +class FinalizablePersistentHandle;
|
| class LocalScope;
|
| class Symbols;
|
|
|
| @@ -1895,7 +1896,7 @@
|
| void SetPrivateKey(const String& value) const;
|
|
|
| static RawTokenStream* New();
|
| - static void DataFinalizer(void *peer);
|
| + static void DataFinalizer(Dart_Handle handle, void *peer);
|
|
|
| FINAL_HEAP_OBJECT_IMPLEMENTATION(TokenStream, Object);
|
| friend class Class;
|
| @@ -4750,6 +4751,11 @@
|
|
|
| virtual intptr_t ByteLength() const;
|
|
|
| + virtual void* GetPeer() const { return NULL; }
|
| +
|
| + FinalizablePersistentHandle* AddFinalizer(
|
| + void* peer, Dart_WeakPersistentHandleFinalizer callback) const;
|
| +
|
| static void Copy(void* dst,
|
| const ByteArray& src,
|
| intptr_t src_offset,
|
| @@ -4768,6 +4774,7 @@
|
|
|
| protected:
|
| virtual uint8_t* ByteAddr(intptr_t byte_offset) const;
|
| + virtual void SetPeer(void* peer) const { }
|
|
|
| template<typename HandleT, typename RawT>
|
| static RawT* NewImpl(intptr_t class_id,
|
| @@ -4784,8 +4791,6 @@
|
| static RawT* NewExternalImpl(intptr_t class_id,
|
| ElementT* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space);
|
|
|
| template<typename HandleT, typename RawT, typename ElementT>
|
| @@ -5385,20 +5390,20 @@
|
|
|
| int8_t At(intptr_t index) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - return raw_ptr()->external_data_->data()[index];
|
| + return raw_ptr()->data_[index];
|
| }
|
|
|
| void SetAt(intptr_t index, int8_t value) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - raw_ptr()->external_data_->data()[index] = value;
|
| + raw_ptr()->data_[index] = value;
|
| }
|
|
|
| - void* GetData() const {
|
| - return raw_ptr()->external_data_->data();
|
| + int8_t* GetData() const {
|
| + return raw_ptr()->data_;
|
| }
|
|
|
| void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| + return raw_ptr()->peer_;
|
| }
|
|
|
| static const intptr_t kBytesPerElement = 1;
|
| @@ -5411,24 +5416,29 @@
|
| return RoundedAllocationSize(sizeof(RawExternalInt8Array));
|
| }
|
|
|
| + static intptr_t data_offset() {
|
| + return OFFSET_OF(RawExternalInt8Array, data_);
|
| + }
|
| +
|
| static RawExternalInt8Array* New(int8_t* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| uint8_t* ByteAddr(intptr_t byte_offset) const {
|
| ASSERT((byte_offset >= 0) && (byte_offset < ByteLength()));
|
| - uint8_t* data =
|
| - reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data());
|
| + uint8_t* data = reinterpret_cast<uint8_t*>(raw_ptr()->data_);
|
| return data + byte_offset;
|
| }
|
|
|
| - void SetExternalData(ExternalByteArrayData<int8_t>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| + void SetData(int8_t* data) const {
|
| + raw_ptr()->data_ = data;
|
| }
|
|
|
| + void SetPeer(void* peer) const {
|
| + raw_ptr()->peer_ = peer;
|
| + }
|
| +
|
| FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalInt8Array, ByteArray);
|
| friend class ByteArray;
|
| friend class Class;
|
| @@ -5443,20 +5453,20 @@
|
|
|
| uint8_t At(intptr_t index) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - return raw_ptr()->external_data_->data()[index];
|
| + return raw_ptr()->data_[index];
|
| }
|
|
|
| void SetAt(intptr_t index, uint8_t value) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - raw_ptr()->external_data_->data()[index] = value;
|
| + raw_ptr()->data_[index] = value;
|
| }
|
|
|
| - void* GetData() const {
|
| - return raw_ptr()->external_data_->data();
|
| + uint8_t* GetData() const {
|
| + return raw_ptr()->data_;
|
| }
|
|
|
| void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| + return raw_ptr()->peer_;
|
| }
|
|
|
| static const intptr_t kBytesPerElement = 1;
|
| @@ -5469,28 +5479,30 @@
|
| return RoundedAllocationSize(sizeof(RawExternalUint8Array));
|
| }
|
|
|
| - static intptr_t external_data_offset() {
|
| - return OFFSET_OF(RawExternalUint8Array, external_data_);
|
| + static intptr_t data_offset() {
|
| + return OFFSET_OF(RawExternalUint8Array, data_);
|
| }
|
|
|
| static RawExternalUint8Array* New(uint8_t* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| uint8_t* ByteAddr(intptr_t byte_offset) const {
|
| ASSERT((byte_offset >= 0) && (byte_offset < ByteLength()));
|
| uint8_t* data =
|
| - reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data());
|
| + reinterpret_cast<uint8_t*>(raw_ptr()->data_);
|
| return data + byte_offset;
|
| }
|
|
|
| - void SetExternalData(ExternalByteArrayData<uint8_t>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| + void SetData(uint8_t* data) const {
|
| + raw_ptr()->data_ = data;
|
| }
|
|
|
| + void SetPeer(void* peer) const {
|
| + raw_ptr()->peer_ = peer;
|
| + }
|
| +
|
| HEAP_OBJECT_IMPLEMENTATION(ExternalUint8Array, ByteArray);
|
| friend class ByteArray;
|
| friend class Class;
|
| @@ -5502,8 +5514,6 @@
|
| public:
|
| static RawExternalUint8ClampedArray* New(uint8_t* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| @@ -5521,20 +5531,20 @@
|
|
|
| int16_t At(intptr_t index) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - return raw_ptr()->external_data_->data()[index];
|
| + return raw_ptr()->data_[index];
|
| }
|
|
|
| void SetAt(intptr_t index, int16_t value) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - raw_ptr()->external_data_->data()[index] = value;
|
| + raw_ptr()->data_[index] = value;
|
| }
|
|
|
| - void* GetData() const {
|
| - return raw_ptr()->external_data_->data();
|
| + int16_t* GetData() const {
|
| + return raw_ptr()->data_;
|
| }
|
|
|
| void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| + return raw_ptr()->peer_;
|
| }
|
|
|
| static const intptr_t kBytesPerElement = 2;
|
| @@ -5549,22 +5559,23 @@
|
|
|
| static RawExternalInt16Array* New(int16_t* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| uint8_t* ByteAddr(intptr_t byte_offset) const {
|
| ASSERT((byte_offset >= 0) && (byte_offset < ByteLength()));
|
| - uint8_t* data =
|
| - reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data());
|
| + uint8_t* data = reinterpret_cast<uint8_t*>(raw_ptr()->data_);
|
| return data + byte_offset;
|
| }
|
|
|
| - void SetExternalData(ExternalByteArrayData<int16_t>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| + void SetData(int16_t* data) const {
|
| + raw_ptr()->data_ = data;
|
| }
|
|
|
| + void SetPeer(void* peer) const {
|
| + raw_ptr()->peer_ = peer;
|
| + }
|
| +
|
| FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalInt16Array, ByteArray);
|
| friend class ByteArray;
|
| friend class Class;
|
| @@ -5579,20 +5590,20 @@
|
|
|
| int16_t At(intptr_t index) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - return raw_ptr()->external_data_->data()[index];
|
| + return raw_ptr()->data_[index];
|
| }
|
|
|
| void SetAt(intptr_t index, int16_t value) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - raw_ptr()->external_data_->data()[index] = value;
|
| + raw_ptr()->data_[index] = value;
|
| }
|
|
|
| - void* GetData() const {
|
| - return raw_ptr()->external_data_->data();
|
| + uint16_t* GetData() const {
|
| + return raw_ptr()->data_;
|
| }
|
|
|
| void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| + return raw_ptr()->peer_;
|
| }
|
|
|
| static const intptr_t kBytesPerElement = 2;
|
| @@ -5607,22 +5618,23 @@
|
|
|
| static RawExternalUint16Array* New(uint16_t* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| uint8_t* ByteAddr(intptr_t byte_offset) const {
|
| ASSERT((byte_offset >= 0) && (byte_offset < ByteLength()));
|
| - uint8_t* data =
|
| - reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data());
|
| + uint8_t* data = reinterpret_cast<uint8_t*>(raw_ptr()->data_);
|
| return data + byte_offset;
|
| }
|
|
|
| - void SetExternalData(ExternalByteArrayData<uint16_t>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| + void SetData(uint16_t* data) const {
|
| + raw_ptr()->data_ = data;
|
| }
|
|
|
| + void SetPeer(void* peer) const {
|
| + raw_ptr()->peer_ = peer;
|
| + }
|
| +
|
| FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalUint16Array, ByteArray);
|
| friend class ByteArray;
|
| friend class Class;
|
| @@ -5637,20 +5649,20 @@
|
|
|
| int32_t At(intptr_t index) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - return raw_ptr()->external_data_->data()[index];
|
| + return raw_ptr()->data_[index];
|
| }
|
|
|
| void SetAt(intptr_t index, int32_t value) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - raw_ptr()->external_data_->data()[index] = value;
|
| + raw_ptr()->data_[index] = value;
|
| }
|
|
|
| - void* GetData() const {
|
| - return raw_ptr()->external_data_->data();
|
| + int32_t* GetData() const {
|
| + return raw_ptr()->data_;
|
| }
|
|
|
| void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| + return raw_ptr()->peer_;
|
| }
|
|
|
| static const intptr_t kBytesPerElement = 4;
|
| @@ -5665,22 +5677,23 @@
|
|
|
| static RawExternalInt32Array* New(int32_t* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| uint8_t* ByteAddr(intptr_t byte_offset) const {
|
| ASSERT((byte_offset >= 0) && (byte_offset < ByteLength()));
|
| - uint8_t* data =
|
| - reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data());
|
| + uint8_t* data = reinterpret_cast<uint8_t*>(raw_ptr()->data_);
|
| return data + byte_offset;
|
| }
|
|
|
| - void SetExternalData(ExternalByteArrayData<int32_t>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| + void SetData(int32_t* data) const {
|
| + raw_ptr()->data_ = data;
|
| }
|
|
|
| + void SetPeer(void* peer) const {
|
| + raw_ptr()->peer_ = peer;
|
| + }
|
| +
|
| FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalInt32Array, ByteArray);
|
| friend class ByteArray;
|
| friend class Class;
|
| @@ -5695,20 +5708,20 @@
|
|
|
| int32_t At(intptr_t index) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - return raw_ptr()->external_data_->data()[index];
|
| + return raw_ptr()->data_[index];
|
| }
|
|
|
| void SetAt(intptr_t index, int32_t value) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - raw_ptr()->external_data_->data()[index] = value;
|
| + raw_ptr()->data_[index] = value;
|
| }
|
|
|
| - void* GetData() const {
|
| - return raw_ptr()->external_data_->data();
|
| + uint32_t* GetData() const {
|
| + return raw_ptr()->data_;
|
| }
|
|
|
| void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| + return raw_ptr()->peer_;
|
| }
|
|
|
| static const intptr_t kBytesPerElement = 4;
|
| @@ -5723,22 +5736,23 @@
|
|
|
| static RawExternalUint32Array* New(uint32_t* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| uint8_t* ByteAddr(intptr_t byte_offset) const {
|
| ASSERT((byte_offset >= 0) && (byte_offset < ByteLength()));
|
| - uint8_t* data =
|
| - reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data());
|
| + uint8_t* data = reinterpret_cast<uint8_t*>(raw_ptr()->data_);
|
| return data + byte_offset;
|
| }
|
|
|
| - void SetExternalData(ExternalByteArrayData<uint32_t>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| + void SetData(uint32_t* data) const {
|
| + raw_ptr()->data_ = data;
|
| }
|
|
|
| + void SetPeer(void* peer) const {
|
| + raw_ptr()->peer_ = peer;
|
| + }
|
| +
|
| FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalUint32Array, ByteArray);
|
| friend class ByteArray;
|
| friend class Class;
|
| @@ -5753,20 +5767,20 @@
|
|
|
| int64_t At(intptr_t index) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - return raw_ptr()->external_data_->data()[index];
|
| + return raw_ptr()->data_[index];
|
| }
|
|
|
| void SetAt(intptr_t index, int64_t value) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - raw_ptr()->external_data_->data()[index] = value;
|
| + raw_ptr()->data_[index] = value;
|
| }
|
|
|
| - void* GetData() const {
|
| - return raw_ptr()->external_data_->data();
|
| + int64_t* GetData() const {
|
| + return raw_ptr()->data_;
|
| }
|
|
|
| void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| + return raw_ptr()->peer_;
|
| }
|
|
|
| static const intptr_t kBytesPerElement = 8;
|
| @@ -5781,22 +5795,23 @@
|
|
|
| static RawExternalInt64Array* New(int64_t* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| uint8_t* ByteAddr(intptr_t byte_offset) const {
|
| ASSERT((byte_offset >= 0) && (byte_offset < ByteLength()));
|
| - uint8_t* data =
|
| - reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data());
|
| + uint8_t* data = reinterpret_cast<uint8_t*>(raw_ptr()->data_);
|
| return data + byte_offset;
|
| }
|
|
|
| - void SetExternalData(ExternalByteArrayData<int64_t>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| + void SetData(int64_t* data) const {
|
| + raw_ptr()->data_ = data;
|
| }
|
|
|
| + void SetPeer(void* peer) const {
|
| + raw_ptr()->peer_ = peer;
|
| + }
|
| +
|
| FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalInt64Array, ByteArray);
|
| friend class ByteArray;
|
| friend class Class;
|
| @@ -5811,20 +5826,20 @@
|
|
|
| int64_t At(intptr_t index) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - return raw_ptr()->external_data_->data()[index];
|
| + return raw_ptr()->data_[index];
|
| }
|
|
|
| void SetAt(intptr_t index, int64_t value) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - raw_ptr()->external_data_->data()[index] = value;
|
| + raw_ptr()->data_[index] = value;
|
| }
|
|
|
| - void* GetData() const {
|
| - return raw_ptr()->external_data_->data();
|
| + uint64_t* GetData() const {
|
| + return raw_ptr()->data_;
|
| }
|
|
|
| void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| + return raw_ptr()->peer_;
|
| }
|
|
|
| static const intptr_t kBytesPerElement = 8;
|
| @@ -5839,22 +5854,23 @@
|
|
|
| static RawExternalUint64Array* New(uint64_t* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| uint8_t* ByteAddr(intptr_t byte_offset) const {
|
| ASSERT((byte_offset >= 0) && (byte_offset < ByteLength()));
|
| - uint8_t* data =
|
| - reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data());
|
| + uint8_t* data = reinterpret_cast<uint8_t*>(raw_ptr()->data_);
|
| return data + byte_offset;
|
| }
|
|
|
| - void SetExternalData(ExternalByteArrayData<uint64_t>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| + void SetData(uint64_t* data) const {
|
| + raw_ptr()->data_ = data;
|
| }
|
|
|
| + void SetPeer(void* peer) const {
|
| + raw_ptr()->peer_ = peer;
|
| + }
|
| +
|
| FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalUint64Array, ByteArray);
|
| friend class ByteArray;
|
| friend class Class;
|
| @@ -5869,20 +5885,20 @@
|
|
|
| float At(intptr_t index) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - return raw_ptr()->external_data_->data()[index];
|
| + return raw_ptr()->data_[index];
|
| }
|
|
|
| void SetAt(intptr_t index, float value) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - raw_ptr()->external_data_->data()[index] = value;
|
| + raw_ptr()->data_[index] = value;
|
| }
|
|
|
| - void* GetData() const {
|
| - return raw_ptr()->external_data_->data();
|
| + float* GetData() const {
|
| + return raw_ptr()->data_;
|
| }
|
|
|
| void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| + return raw_ptr()->peer_;
|
| }
|
|
|
| static const intptr_t kBytesPerElement = 4;
|
| @@ -5897,22 +5913,23 @@
|
|
|
| static RawExternalFloat32Array* New(float* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| uint8_t* ByteAddr(intptr_t byte_offset) const {
|
| ASSERT((byte_offset >= 0) && (byte_offset < ByteLength()));
|
| - uint8_t* data =
|
| - reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data());
|
| + uint8_t* data = reinterpret_cast<uint8_t*>(raw_ptr()->data_);
|
| return data + byte_offset;
|
| }
|
|
|
| - void SetExternalData(ExternalByteArrayData<float>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| + void SetData(float* data) const {
|
| + raw_ptr()->data_ = data;
|
| }
|
|
|
| + void SetPeer(void* peer) const {
|
| + raw_ptr()->peer_ = peer;
|
| + }
|
| +
|
| FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat32Array, ByteArray);
|
| friend class ByteArray;
|
| friend class Class;
|
| @@ -5927,20 +5944,20 @@
|
|
|
| double At(intptr_t index) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - return raw_ptr()->external_data_->data()[index];
|
| + return raw_ptr()->data_[index];
|
| }
|
|
|
| void SetAt(intptr_t index, double value) const {
|
| ASSERT((index >= 0) && (index < Length()));
|
| - raw_ptr()->external_data_->data()[index] = value;
|
| + raw_ptr()->data_[index] = value;
|
| }
|
|
|
| - void* GetData() const {
|
| - return raw_ptr()->external_data_->data();
|
| + double* GetData() const {
|
| + return raw_ptr()->data_;
|
| }
|
|
|
| void* GetPeer() const {
|
| - return raw_ptr()->external_data_->peer();
|
| + return raw_ptr()->peer_;
|
| }
|
|
|
| static const intptr_t kBytesPerElement = 8;
|
| @@ -5955,22 +5972,23 @@
|
|
|
| static RawExternalFloat64Array* New(double* data,
|
| intptr_t len,
|
| - void* peer,
|
| - Dart_PeerFinalizer callback,
|
| Heap::Space space = Heap::kNew);
|
|
|
| private:
|
| uint8_t* ByteAddr(intptr_t byte_offset) const {
|
| ASSERT((byte_offset >= 0) && (byte_offset < ByteLength()));
|
| - uint8_t* data =
|
| - reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data());
|
| + uint8_t* data = reinterpret_cast<uint8_t*>(raw_ptr()->data_);
|
| return data + byte_offset;
|
| }
|
|
|
| - void SetExternalData(ExternalByteArrayData<double>* data) {
|
| - raw_ptr()->external_data_ = data;
|
| + void SetData(double* data) const {
|
| + raw_ptr()->data_ = data;
|
| }
|
|
|
| + void SetPeer(void* peer) const {
|
| + raw_ptr()->peer_ = peer;
|
| + }
|
| +
|
| FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat64Array, ByteArray);
|
| friend class ByteArray;
|
| friend class Class;
|
|
|