aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/v4
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2012-05-23 16:01:21 +0100
committerQt by Nokia <qt-info@nokia.com>2012-05-24 17:50:13 +0200
commitd12c9306ee2355a76e3e037877ee445b31f66a23 (patch)
tree324f6b5979ae334358bf71474348a7e3700a68da /src/qml/qml/v4
parent6ff8aa4b83e801acadd45cc32759ea77cf4532c8 (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/v4')
-rw-r--r--src/qml/qml/v4/qv4bindings.cpp64
-rw-r--r--src/qml/qml/v4/qv4bindings_p.h20
2 files changed, 53 insertions, 31 deletions
diff --git a/src/qml/qml/v4/qv4bindings.cpp b/src/qml/qml/v4/qv4bindings.cpp
index 39b571f336..ba90654661 100644
--- a/src/qml/qml/v4/qv4bindings.cpp
+++ b/src/qml/qml/v4/qv4bindings.cpp
@@ -73,6 +73,16 @@ QT_BEGIN_NAMESPACE
using namespace QQmlJS;
+QQmlAbstractBinding::VTable QV4Bindings_Binding_vtable = {
+ QV4Bindings::Binding::destroy,
+ QQmlAbstractBinding::default_expression,
+ QV4Bindings::Binding::propertyIndex,
+ QV4Bindings::Binding::object,
+ QV4Bindings::Binding::setEnabled,
+ QV4Bindings::Binding::update,
+ QV4Bindings::Binding::retargetBinding
+};
+
namespace {
struct Register {
typedef QQmlRegisterType Type;
@@ -307,46 +317,58 @@ QQmlAbstractBinding *QV4Bindings::configBinding(int index, QObject *target,
return rv;
}
-void QV4Bindings::Binding::setEnabled(bool e, QQmlPropertyPrivate::WriteFlags flags)
+void QV4Bindings::Binding::setEnabled(QQmlAbstractBinding *_This,
+ bool e, QQmlPropertyPrivate::WriteFlags flags)
{
- if (enabled != e) {
- enabled = e;
+ QV4Bindings::Binding *This = static_cast<QV4Bindings::Binding *>(_This);
- if (e) update(flags);
+ if (This->enabled != e) {
+ This->enabled = e;
+
+ if (e) update(_This, flags);
}
}
-void QV4Bindings::Binding::update(QQmlPropertyPrivate::WriteFlags flags)
+void QV4Bindings::Binding::update(QQmlAbstractBinding *_This, QQmlPropertyPrivate::WriteFlags flags)
{
- parent->run(this, flags);
+ QV4Bindings::Binding *This = static_cast<QV4Bindings::Binding *>(_This);
+ This->parent->run(This, flags);
}
-void QV4Bindings::Binding::destroy()
+void QV4Bindings::Binding::destroy(QQmlAbstractBinding *_This)
{
- enabled = false;
- removeFromObject();
- clear();
- removeError();
- parent->release();
+ QV4Bindings::Binding *This = static_cast<QV4Bindings::Binding *>(_This);
+
+ This->enabled = false;
+ This->removeFromObject();
+ This->clear();
+ This->removeError();
+ This->parent->release();
}
-int QV4Bindings::Binding::propertyIndex() const
+int QV4Bindings::Binding::propertyIndex(const QQmlAbstractBinding *_This)
{
- if (target.hasValue()) return target.constValue()->targetProperty;
+ const QV4Bindings::Binding *This = static_cast<const QV4Bindings::Binding *>(_This);
+
+ if (This->target.hasValue()) return This->target.constValue()->targetProperty;
//mask out the type information set for value types
- else return property & 0xFF00FFFF;
+ else return This->property & 0xFF00FFFF;
}
-QObject *QV4Bindings::Binding::object() const
+QObject *QV4Bindings::Binding::object(const QQmlAbstractBinding *_This)
{
- if (target.hasValue()) return target.constValue()->target;
- return *target;
+ const QV4Bindings::Binding *This = static_cast<const QV4Bindings::Binding *>(_This);
+
+ if (This->target.hasValue()) return This->target.constValue()->target;
+ return *This->target;
}
-void QV4Bindings::Binding::retargetBinding(QObject *t, int i)
+void QV4Bindings::Binding::retargetBinding(QQmlAbstractBinding *_This, QObject *t, int i)
{
- target.value().target = t;
- target.value().targetProperty = i;
+ QV4Bindings::Binding *This = static_cast<QV4Bindings::Binding *>(_This);
+
+ This->target.value().target = t;
+ This->target.value().targetProperty = i;
}
QV4Bindings::Subscription::Subscription()
diff --git a/src/qml/qml/v4/qv4bindings_p.h b/src/qml/qml/v4/qv4bindings_p.h
index d2d8520a83..e9c6301cef 100644
--- a/src/qml/qml/v4/qv4bindings_p.h
+++ b/src/qml/qml/v4/qv4bindings_p.h
@@ -79,20 +79,17 @@ public:
static void **getDecodeInstrTable();
#endif
-private:
- Q_DISABLE_COPY(QV4Bindings)
-
struct Binding : public QQmlAbstractBinding, public QQmlDelayedError {
- Binding() : enabled(false), updating(0), property(0),
+ Binding() : QQmlAbstractBinding(V4), enabled(false), updating(0), property(0),
scope(0), target(0), executedBlocks(0), parent(0) {}
// Inherited from QQmlAbstractBinding
- virtual void setEnabled(bool, QQmlPropertyPrivate::WriteFlags flags);
- virtual void update(QQmlPropertyPrivate::WriteFlags flags);
- virtual void destroy();
- virtual int propertyIndex() const;
- virtual void retargetBinding(QObject *, int);
- virtual QObject *object() const;
+ 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);
struct Retarget {
QObject *target;
@@ -114,6 +111,9 @@ private:
QV4Bindings *parent;
};
+private:
+ Q_DISABLE_COPY(QV4Bindings)
+
class Subscription : public QQmlNotifierEndpoint
{
public: