ctxt->setIdPropertyData(comp->contextCaches.at(instr.contextCache));
if (instr.compiledBinding != -1) {
const char *v4data = datas.at(instr.compiledBinding).constData();
- ctxt->v4bindings = new QDeclarativeV4Bindings(v4data, ctxt);
+ ctxt->v4bindings = new QDeclarativeV4Bindings(v4data, ctxt, comp);
}
QML_END_INSTR(Init)
void run(Binding *, QDeclarativePropertyPrivate::WriteFlags flags);
QDeclarativeV4Program *program;
+ QDeclarativeRefCount *dataRef;
Binding *bindings;
static int methodCount;
};
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);
d->methodCount = QDeclarativeV4Bindings::staticMetaObject.methodCount();
d->program = (QDeclarativeV4Program *)program;
+ d->dataRef = dataRef;
+ if (dataRef) dataRef->addref();
if (program) {
d->init();
{
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);
}
public QDeclarativeRefCount
{
public:
- QDeclarativeV4Bindings(const char *program, QDeclarativeContextData *context);
+ QDeclarativeV4Bindings(const char *program, QDeclarativeContextData *context,
+ QDeclarativeRefCount *);
virtual ~QDeclarativeV4Bindings();
QDeclarativeAbstractBinding *configBinding(int index, QObject *target, QObject *scope, int property);