diff options
author | Lars Knoll <lars.knoll@theqtcompany.com> | 2015-01-10 17:55:29 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2015-01-20 13:29:59 +0100 |
commit | 8a23c8a613b5eb360a48ee6c64ea3507caf878e2 (patch) | |
tree | 02282bda7d9f120389b5ea1341007d3617a4103f /src/qml/jsruntime/qv4arraydata_p.h | |
parent | 4690cc0cd3afa3bb0361da2b01834762b6c69646 (diff) |
Move vtable out of internalClass
We can move the internalClass to Object later on, and such save
having the internalClass on lots of Heap objects.
This commit basically adds and starts making use of a new
vtable pointer in Heap::Base. In addition, the construction
methods in the memory manager now automatically setup the
correct vtable.
Removing the vtable code from InternalClass and moving it into
Object will come in a separate commit
Change-Id: If49e8d73c769bf65bf47fe4dbf8b9546c8019dbc
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4arraydata_p.h')
-rw-r--r-- | src/qml/jsruntime/qv4arraydata_p.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/qml/jsruntime/qv4arraydata_p.h b/src/qml/jsruntime/qv4arraydata_p.h index 533d51cd91..2ba6cedf90 100644 --- a/src/qml/jsruntime/qv4arraydata_p.h +++ b/src/qml/jsruntime/qv4arraydata_p.h @@ -42,14 +42,15 @@ QT_BEGIN_NAMESPACE namespace QV4 { -#define V4_ARRAYDATA(Data) \ +#define V4_ARRAYDATA(DataClass) \ public: \ Q_MANAGED_CHECK \ + typedef QV4::Heap::DataClass Data; \ static const QV4::ArrayVTable static_vtbl; \ static inline const QV4::ManagedVTable *staticVTable() { return &static_vtbl.managedVTable; } \ V4_MANAGED_SIZE_TEST \ - const QV4::Heap::Data *d() const { return static_cast<const QV4::Heap::Data *>(m); } \ - QV4::Heap::Data *d() { return static_cast<QV4::Heap::Data *>(m); } + const Data *d() const { return static_cast<const Data *>(m); } \ + Data *d() { return static_cast<Data *>(m); } struct ArrayData; @@ -98,7 +99,7 @@ struct ArrayData : public Base { bool isSparse() const { return type == Sparse; } - const ArrayVTable *vtable() const { return reinterpret_cast<const ArrayVTable *>(internalClass->vtable); } + const ArrayVTable *vtable() const { return reinterpret_cast<const ArrayVTable *>(Base::vtable); } inline ReturnedValue get(uint i) const { return vtable()->get(this, i); @@ -182,7 +183,7 @@ struct Q_QML_EXPORT ArrayData : public Managed const Value *arrayData() const { return &d()->arrayData[0]; } Value *arrayData() { return &d()->arrayData[0]; } - const ArrayVTable *vtable() const { return reinterpret_cast<const ArrayVTable *>(internalClass()->vtable); } + const ArrayVTable *vtable() const { return d()->vtable(); } bool isSparse() const { return type() == Heap::ArrayData::Sparse; } uint length() const { |