aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmlecmascript/testtypes.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qml/qqmlecmascript/testtypes.h')
-rw-r--r--tests/auto/qml/qqmlecmascript/testtypes.h85
1 files changed, 12 insertions, 73 deletions
diff --git a/tests/auto/qml/qqmlecmascript/testtypes.h b/tests/auto/qml/qqmlecmascript/testtypes.h
index e4dd1e3e18..4d30816b0a 100644
--- a/tests/auto/qml/qqmlecmascript/testtypes.h
+++ b/tests/auto/qml/qqmlecmascript/testtypes.h
@@ -63,6 +63,7 @@
#include <private/qqmlengine_p.h>
#include <private/qv8engine_p.h>
+#include <private/qv4qobjectwrapper_p.h>
class MyQmlAttachedObject : public QObject
{
@@ -265,7 +266,7 @@ public slots:
void myinvokable(MyQmlObject *o) { myinvokableObject = o; }
void variantMethod(const QVariant &v) { m_variant = v; }
void qjsvalueMethod(const QJSValue &v) { m_qjsvalue = v; }
- void v8function(QQmlV8Function*);
+ void v8function(QQmlV4Function*);
void registeredFlagMethod(Qt::MouseButtons v) { m_buttons = v; }
private:
@@ -1172,16 +1173,14 @@ private:
int m_value;
};
-class CircularReferenceObject : public QObject,
- public QV8GCCallback::Node
+class CircularReferenceObject : public QObject
{
Q_OBJECT
public:
CircularReferenceObject(QObject *parent = 0)
- : QObject(parent), QV8GCCallback::Node(callback), m_referenced(0), m_dtorCount(0)
+ : QObject(parent), m_dtorCount(0)
{
- QV8GCCallback::addGcCallbackNode(this);
}
~CircularReferenceObject()
@@ -1204,74 +1203,15 @@ public:
Q_INVOKABLE void addReference(QObject *other)
{
- m_referenced = other;
- }
+ QQmlData *ddata = QQmlData::get(this);
+ assert(ddata);
+ QV4::QObjectWrapper *thisObject = ddata->jsWrapper.value().as<QV4::QObjectWrapper>();
+ assert(thisObject);
- static void callback(QV8GCCallback::Node *n)
- {
- CircularReferenceObject *cro = static_cast<CircularReferenceObject*>(n);
- if (cro->m_referenced) {
- cro->m_engine->addRelationshipForGC(cro, cro->m_referenced);
- }
- }
+ QQmlData *otherDData = QQmlData::get(other);
+ assert(otherDData);
- void setEngine(QQmlEngine* declarativeEngine)
- {
- m_engine = QQmlEnginePrivate::get(declarativeEngine)->v8engine();
- }
-
-private:
- QObject *m_referenced;
- int *m_dtorCount;
- QV8Engine* m_engine;
-};
-Q_DECLARE_METATYPE(CircularReferenceObject*)
-
-class CircularReferenceHandle : public QObject,
- public QV8GCCallback::Node
-{
- Q_OBJECT
-
-public:
- CircularReferenceHandle(QObject *parent = 0)
- : QObject(parent), QV8GCCallback::Node(gccallback), m_dtorCount(0), m_engine(0)
- {
- QV8GCCallback::addGcCallbackNode(this);
- }
-
- ~CircularReferenceHandle()
- {
- if (m_dtorCount) *m_dtorCount = *m_dtorCount + 1;
- }
-
- Q_INVOKABLE void setDtorCount(int *dtorCount)
- {
- m_dtorCount = dtorCount;
- }
-
- Q_INVOKABLE CircularReferenceHandle *generate(QObject *parent = 0)
- {
- CircularReferenceHandle *retn = new CircularReferenceHandle(parent);
- retn->m_dtorCount = m_dtorCount;
- retn->m_engine = m_engine;
- return retn;
- }
-
- Q_INVOKABLE void addReference(v8::Persistent<v8::Value> handle)
- {
- m_referenced = qPersistentNew(handle);
- m_referenced.MakeWeak(static_cast<void*>(this), wrcallback);
- }
-
- static void wrcallback(v8::Persistent<v8::Value> handle, void *)
- {
- qPersistentDispose(handle);
- }
-
- static void gccallback(QV8GCCallback::Node *n)
- {
- CircularReferenceHandle *crh = static_cast<CircularReferenceHandle*>(n);
- crh->m_engine->addRelationshipForGC(crh, crh->m_referenced);
+ thisObject->defineDefaultProperty(thisObject->engine(), QStringLiteral("autoTestStrongRef"), otherDData->jsWrapper.value());
}
void setEngine(QQmlEngine* declarativeEngine)
@@ -1280,11 +1220,10 @@ public:
}
private:
- v8::Persistent<v8::Value> m_referenced;
int *m_dtorCount;
QV8Engine* m_engine;
};
-Q_DECLARE_METATYPE(CircularReferenceHandle*)
+Q_DECLARE_METATYPE(CircularReferenceObject*)
class MyDynamicCreationDestructionObject : public QObject
{