diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2012-05-23 16:01:21 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-24 17:50:13 +0200 |
commit | d12c9306ee2355a76e3e037877ee445b31f66a23 (patch) | |
tree | 324f6b5979ae334358bf71474348a7e3700a68da /src/qml/qml/v8 | |
parent | 6ff8aa4b83e801acadd45cc32759ea77cf4532c8 (diff) |
Use static dispatch tables for QQmlAbstractBinding
This saves us the space of the virtual table pointer, but does
somewhat limit us to the 4 QQmlAbstractBinding types that we
have today.
Change-Id: I03d06ef2ec0c51271c28e7a5aab6dc689d369da4
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Diffstat (limited to 'src/qml/qml/v8')
-rw-r--r-- | src/qml/qml/v8/qv8bindings.cpp | 68 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8bindings_p.h | 17 |
2 files changed, 60 insertions, 25 deletions
diff --git a/src/qml/qml/v8/qv8bindings.cpp b/src/qml/qml/v8/qv8bindings.cpp index c92b87ac6c..d8624c7ad6 100644 --- a/src/qml/qml/v8/qv8bindings.cpp +++ b/src/qml/qml/v8/qv8bindings.cpp @@ -52,22 +52,35 @@ QT_BEGIN_NAMESPACE +QQmlAbstractBinding::VTable QV8Bindings_Binding_vtable = { + QV8Bindings::Binding::destroy, + QQmlAbstractBinding::default_expression, + QV8Bindings::Binding::propertyIndex, + QV8Bindings::Binding::object, + QV8Bindings::Binding::setEnabled, + QV8Bindings::Binding::update, + QV8Bindings::Binding::retargetBinding +}; + static QQmlJavaScriptExpression::VTable QV8Bindings_Binding_jsvtable = { QV8Bindings::Binding::expressionIdentifier, QV8Bindings::Binding::expressionChanged }; QV8Bindings::Binding::Binding() -: QQmlJavaScriptExpression(&QV8Bindings_Binding_jsvtable), parent(0) +: QQmlJavaScriptExpression(&QV8Bindings_Binding_jsvtable), QQmlAbstractBinding(V8), parent(0) { } -void QV8Bindings::Binding::setEnabled(bool e, QQmlPropertyPrivate::WriteFlags flags) +void QV8Bindings::Binding::setEnabled(QQmlAbstractBinding *_This, bool e, + QQmlPropertyPrivate::WriteFlags flags) { - if (enabledFlag() != e) { - setEnabledFlag(e); + QV8Bindings::Binding *This = static_cast<QV8Bindings::Binding *>(_This); + + if (This->enabledFlag() != e) { + This->setEnabledFlag(e); - if (e) update(flags); + if (e) This->update(flags); } } @@ -83,10 +96,19 @@ void QV8Bindings::Binding::refresh() update(); } -int QV8Bindings::Binding::propertyIndex() const +int QV8Bindings::Binding::propertyIndex(const QQmlAbstractBinding *_This) { - if (target.hasValue()) return target.constValue()->targetProperty; - else return instruction->property.encodedIndex(); + const QV8Bindings::Binding *This = static_cast<const QV8Bindings::Binding *>(_This); + if (This->target.hasValue()) return This->target.constValue()->targetProperty; + else return This->instruction->property.encodedIndex(); +} + +QObject *QV8Bindings::Binding::object(const QQmlAbstractBinding *_This) +{ + const QV8Bindings::Binding *This = static_cast<const QV8Bindings::Binding *>(_This); + + if (This->target.hasValue()) return This->target.constValue()->target; + else return *This->target; } QObject *QV8Bindings::Binding::object() const @@ -95,10 +117,18 @@ QObject *QV8Bindings::Binding::object() const else return *target; } -void QV8Bindings::Binding::retargetBinding(QObject *t, int i) +void QV8Bindings::Binding::retargetBinding(QQmlAbstractBinding *_This, QObject *t, int i) +{ + QV8Bindings::Binding *This = static_cast<QV8Bindings::Binding *>(_This); + + This->target.value().target = t; + This->target.value().targetProperty = i; +} + +void QV8Bindings::Binding::update(QQmlAbstractBinding *_This, QQmlPropertyPrivate::WriteFlags flags) { - target.value().target = t; - target.value().targetProperty = i; + QV8Bindings::Binding *This = static_cast<QV8Bindings::Binding *>(_This); + This->update(flags); } void QV8Bindings::Binding::update(QQmlPropertyPrivate::WriteFlags flags) @@ -184,14 +214,16 @@ void QV8Bindings::Binding::expressionChanged(QQmlJavaScriptExpression *e) This->update(QQmlPropertyPrivate::DontRemoveBinding); } -void QV8Bindings::Binding::destroy() +void QV8Bindings::Binding::destroy(QQmlAbstractBinding *_This) { - setEnabledFlag(false); - setDestroyedFlag(true); - removeFromObject(); - clear(); - clearError(); - parent->release(); + QV8Bindings::Binding *This = static_cast<QV8Bindings::Binding *>(_This); + + This->setEnabledFlag(false); + This->setDestroyedFlag(true); + This->removeFromObject(); + This->clear(); + This->clearError(); + This->parent->release(); } QV8Bindings::QV8Bindings(QQmlCompiledData::V8Program *program, diff --git a/src/qml/qml/v8/qv8bindings_p.h b/src/qml/qml/v8/qv8bindings_p.h index 7cc1cc9c21..fc6617b516 100644 --- a/src/qml/qml/v8/qv8bindings_p.h +++ b/src/qml/qml/v8/qv8bindings_p.h @@ -93,13 +93,16 @@ public: static QString expressionIdentifier(QQmlJavaScriptExpression *); static void expressionChanged(QQmlJavaScriptExpression *); - // Inherited from QQmlAbstractBinding - virtual void setEnabled(bool, QQmlPropertyPrivate::WriteFlags flags); - virtual void update(QQmlPropertyPrivate::WriteFlags flags); - virtual void destroy(); - virtual QObject *object() const; - virtual int propertyIndex() const; - virtual void retargetBinding(QObject *, int); + // "Inherited" from QQmlAbstractBinding + static void destroy(QQmlAbstractBinding *); + static int propertyIndex(const QQmlAbstractBinding *); + static QObject *object(const QQmlAbstractBinding *); + static void setEnabled(QQmlAbstractBinding *, bool, QQmlPropertyPrivate::WriteFlags); + static void update(QQmlAbstractBinding *, QQmlPropertyPrivate::WriteFlags); + static void retargetBinding(QQmlAbstractBinding *, QObject *, int); + + QObject *object() const; + void update(QQmlPropertyPrivate::WriteFlags flags); QV8Bindings *parent; |