aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/v4/qdeclarativev4bindings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/qml/v4/qdeclarativev4bindings.cpp')
-rw-r--r--src/declarative/qml/v4/qdeclarativev4bindings.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/declarative/qml/v4/qdeclarativev4bindings.cpp b/src/declarative/qml/v4/qdeclarativev4bindings.cpp
index d93d930034..20d79dc46d 100644
--- a/src/declarative/qml/v4/qdeclarativev4bindings.cpp
+++ b/src/declarative/qml/v4/qdeclarativev4bindings.cpp
@@ -221,6 +221,7 @@ public:
void run(Binding *, QDeclarativePropertyPrivate::WriteFlags flags);
QDeclarativeV4Program *program;
+ QDeclarativeRefCount *dataRef;
Binding *bindings;
static int methodCount;
@@ -245,18 +246,20 @@ public:
};
QDeclarativeV4BindingsPrivate::QDeclarativeV4BindingsPrivate()
-: subscriptions(0), program(0), bindings(0)
+: subscriptions(0), program(0), dataRef(0), bindings(0)
{
}
QDeclarativeV4BindingsPrivate::~QDeclarativeV4BindingsPrivate()
{
delete [] subscriptions; subscriptions = 0;
+ if (dataRef) dataRef->release();
}
int QDeclarativeV4BindingsPrivate::methodCount = -1;
-QDeclarativeV4Bindings::QDeclarativeV4Bindings(const char *program, QDeclarativeContextData *context)
+QDeclarativeV4Bindings::QDeclarativeV4Bindings(const char *program, QDeclarativeContextData *context,
+ QDeclarativeRefCount *dataRef)
: QObject(*(new QDeclarativeV4BindingsPrivate))
{
Q_D(QDeclarativeV4Bindings);
@@ -265,6 +268,8 @@ QDeclarativeV4Bindings::QDeclarativeV4Bindings(const char *program, QDeclarative
d->methodCount = QDeclarativeV4Bindings::staticMetaObject.methodCount();
d->program = (QDeclarativeV4Program *)program;
+ d->dataRef = dataRef;
+ if (dataRef) dataRef->addref();
if (program) {
d->init();
@@ -744,7 +749,7 @@ void **QDeclarativeV4Bindings::getDecodeInstrTable()
{
static void **decode_instr;
if (!decode_instr) {
- QDeclarativeV4Bindings dummy(0, 0);
+ QDeclarativeV4Bindings dummy(0, 0, 0);
quint32 executedBlocks = 0;
dummy.d_func()->run(0, executedBlocks, 0, 0, 0, 0, QDeclarativePropertyPrivate::BypassInterceptor, &decode_instr);
}