Fix crashes in workerscript tests (qqmlecmascript and qquickworkerscript)
authorSimon Hausmann <simon.hausmann@digia.com>
Tue, 4 Jun 2013 14:00:13 +0000 (16:00 +0200)
committerLars Knoll <lars.knoll@digia.com>
Wed, 5 Jun 2013 08:53:39 +0000 (10:53 +0200)
We need access to the QNam for a worker and other bits from the v8Engine,
so for that it's easiest right now to store the v8engine pointer directly.

There aren't many occurrences of v8engine left and we're gradually getting rid
of them, but this let's the tests not crash at least :). Once the transition
is complete, QV8Engine should collapse and v4->v8Engine->jsengine should become
v4->publicEngine again.

Change-Id: I98558dd687875f20f1dbe25381ee7efe502c7f24
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/imports/localstorage/plugin.cpp
src/qml/qml/v4/qv4engine_p.h
src/qml/qml/v4/qv4include.cpp
src/qml/qml/v4/qv4sequenceobject.cpp
src/qml/qml/v8/qjsengine.cpp
src/qml/qml/v8/qjsvalue.cpp
src/qml/qml/v8/qqmlbuiltinfunctions.cpp
src/qml/qml/v8/qv8engine.cpp
src/qml/qml/v8/qv8engine_p.h
src/qml/qml/v8/qv8qobjectwrapper.cpp
src/qml/types/qquickworkerscript.cpp

index 323b89b..1c57b03 100644 (file)
@@ -192,7 +192,7 @@ static QString qmlsqldatabase_databaseFile(const QString& connectionName, QV8Eng
 
 static Value qmlsqldatabase_rows_index(QQmlSqlDatabaseWrapper *r, ExecutionEngine *v4, uint32_t index, bool *hasProperty = 0)
 {
-    QV8Engine *v8 = v4->publicEngine->handle();
+    QV8Engine *v8 = v4->v8Engine;
 
     if (r->sqlQuery.at() == (int)index || r->sqlQuery.seek(index)) {
         QSqlRecord record = r->sqlQuery.record();
@@ -240,7 +240,7 @@ static Value qmlsqldatabase_executeSql(SimpleCallContext *ctx)
     if (!r || r->type != QQmlSqlDatabaseWrapper::Query)
         V4THROW_REFERENCE("Not a SQLDatabase::Query object");
 
-    QV8Engine *engine = ctx->engine->publicEngine->handle();
+    QV8Engine *engine = ctx->engine->v8Engine;
 
     if (!r->inTransaction)
         V4THROW_SQL(SQLEXCEPTION_DATABASE_ERR,QQmlEngine::tr("executeSql called outside transaction()"));
@@ -318,7 +318,7 @@ static Value qmlsqldatabase_changeVersion(SimpleCallContext *ctx)
     if (!r || r->type != QQmlSqlDatabaseWrapper::Database)
         V4THROW_REFERENCE("Not a SQLDatabase object");
 
-    QV8Engine *engine = ctx->engine->publicEngine->handle();
+    QV8Engine *engine = ctx->engine->v8Engine;
 
     QSqlDatabase db = r->database;
     QString from_version = ctx->arguments[0].toQString();
@@ -374,7 +374,7 @@ static Value qmlsqldatabase_transaction_shared(SimpleCallContext *ctx, bool read
     if (!r || r->type != QQmlSqlDatabaseWrapper::Database)
         V4THROW_REFERENCE("Not a SQLDatabase object");
 
-    QV8Engine *engine = ctx->engine->publicEngine->handle();
+    QV8Engine *engine = ctx->engine->v8Engine;
 
     FunctionObject *callback = ctx->argumentCount ? ctx->arguments[0].asFunctionObject() : 0;
     if (!callback)
index a734e64..c137534 100644 (file)
@@ -54,7 +54,7 @@ class BumpPointerAllocator;
 
 QT_BEGIN_NAMESPACE
 
-class QJSEngine;
+class QV8Engine;
 
 namespace QQmlJS {
 namespace Debugging {
@@ -127,7 +127,7 @@ struct Q_QML_EXPORT ExecutionEngine
 
     Function *globalCode;
 
-    QJSEngine *publicEngine;
+    QV8Engine *v8Engine;
 
     Value objectCtor;
     Value stringCtor;
index b834937..0718f9b 100644 (file)
@@ -172,7 +172,7 @@ QV4::Value QV4Include::include(QV4::SimpleCallContext *ctx)
         return QV4::Value::undefinedValue();
 
     QV4::ExecutionEngine *v4 = ctx->engine;
-    QV8Engine *engine = v4->publicEngine->handle();
+    QV8Engine *engine = v4->v8Engine;
     QQmlContextData *context = engine->callingContext();
 
     if (!context || !context->isJSContext)
index 5a1c5b9..5358201 100644 (file)
@@ -54,7 +54,7 @@ using namespace QV4;
 // helper function to generate valid warnings if errors occur during sequence operations.
 static void generateWarning(QV4::ExecutionContext *ctx, const QString& description)
 {
-    QQmlEngine *engine = qobject_cast<QQmlEngine*>(ctx->engine->publicEngine);
+    QQmlEngine *engine = ctx->engine->v8Engine->engine();
     if (!engine)
         return;
     QQmlError retn;
index da214a0..d1a2c73 100644 (file)
@@ -354,7 +354,7 @@ bool QJSEngine::convertV2(const QJSValue &value, int type, void *ptr)
 {
     QJSValuePrivate *vp = QJSValuePrivate::get(value);
     QV4::ExecutionEngine *e = vp->engine();
-    QV8Engine *engine = e ? QV8Engine::get(e->publicEngine) : 0;
+    QV8Engine *engine = e ? e->v8Engine : 0;
     if (engine) {
         return engine->metaTypeFromJS(vp->getValue(engine->m_v4Engine), type, ptr);
     } else {
index 379177e..2fb3cc6 100644 (file)
@@ -605,7 +605,7 @@ QJSEngine* QJSValue::engine() const
 {
     QV4::ExecutionEngine *engine = d->engine();
     if (engine)
-        return engine->publicEngine;
+        return engine->v8Engine->publicEngine();
 }
 
 #endif // QT_DEPRECATED
index 020a813..ac2a2a0 100644 (file)
@@ -200,7 +200,7 @@ Value QtObject::method_rgba(QV4::SimpleCallContext *ctx)
     if (a < 0.0) a=0.0;
     if (a > 1.0) a=1.0;
 
-    return ctx->engine->publicEngine->handle()->fromVariant(QQml_colorProvider()->fromRgbF(r, g, b, a));
+    return ctx->engine->v8Engine->fromVariant(QQml_colorProvider()->fromRgbF(r, g, b, a));
 }
 
 /*!
@@ -229,7 +229,7 @@ Value QtObject::method_hsla(QV4::SimpleCallContext *ctx)
     if (a < 0.0) a=0.0;
     if (a > 1.0) a=1.0;
 
-    return ctx->engine->publicEngine->handle()->fromVariant(QQml_colorProvider()->fromHslF(h, s, l, a));
+    return ctx->engine->v8Engine->fromVariant(QQml_colorProvider()->fromHslF(h, s, l, a));
 }
 
 /*!
@@ -247,7 +247,7 @@ Value QtObject::method_colorEqual(QV4::SimpleCallContext *ctx)
 
     bool ok = false;
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     QVariant lhs = v8engine->toVariant(ctx->arguments[0], -1);
     if (lhs.userType() == QVariant::String) {
@@ -290,7 +290,7 @@ Value QtObject::method_rect(QV4::SimpleCallContext *ctx)
     double w = ctx->arguments[2].toNumber();
     double h = ctx->arguments[3].toNumber();
 
-    return ctx->engine->publicEngine->handle()->fromVariant(QVariant::fromValue(QRectF(x, y, w, h)));
+    return ctx->engine->v8Engine->fromVariant(QVariant::fromValue(QRectF(x, y, w, h)));
 }
 
 /*!
@@ -305,7 +305,7 @@ Value QtObject::method_point(QV4::SimpleCallContext *ctx)
     double x = ctx->arguments[0].toNumber();
     double y = ctx->arguments[1].toNumber();
 
-    return ctx->engine->publicEngine->handle()->fromVariant(QVariant::fromValue(QPointF(x, y)));
+    return ctx->engine->v8Engine->fromVariant(QVariant::fromValue(QPointF(x, y)));
 }
 
 /*!
@@ -320,7 +320,7 @@ Value QtObject::method_size(QV4::SimpleCallContext *ctx)
     double w = ctx->arguments[0].toNumber();
     double h = ctx->arguments[1].toNumber();
 
-    return ctx->engine->publicEngine->handle()->fromVariant(QVariant::fromValue(QSizeF(w, h)));
+    return ctx->engine->v8Engine->fromVariant(QVariant::fromValue(QSizeF(w, h)));
 }
 
 /*!
@@ -336,7 +336,7 @@ Value QtObject::method_font(QV4::SimpleCallContext *ctx)
     if (ctx->argumentCount != 1 || !ctx->arguments[0].isObject())
         V4THROW_ERROR("Qt.font(): Invalid arguments");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     bool ok = false;
     QVariant v = QQml_valueTypeProvider()->createVariantFromJsObject(QMetaType::QFont, QQmlV4Handle(ctx->arguments[0]), v8engine, &ok);
     if (!ok)
@@ -360,7 +360,7 @@ Value QtObject::method_vector2d(QV4::SimpleCallContext *ctx)
     xy[1] = ctx->arguments[1].toNumber();
 
     const void *params[] = { xy };
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     return v8engine->fromVariant(QQml_valueTypeProvider()->createValueType(QMetaType::QVector2D, 1, params));
 }
 
@@ -379,7 +379,7 @@ Value QtObject::method_vector3d(QV4::SimpleCallContext *ctx)
     xyz[2] = ctx->arguments[2].toNumber();
 
     const void *params[] = { xyz };
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     return v8engine->fromVariant(QQml_valueTypeProvider()->createValueType(QMetaType::QVector3D, 1, params));
 }
 
@@ -399,7 +399,7 @@ Value QtObject::method_vector4d(QV4::SimpleCallContext *ctx)
     xyzw[3] = ctx->arguments[3].toNumber();
 
     const void *params[] = { xyzw };
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     return v8engine->fromVariant(QQml_valueTypeProvider()->createValueType(QMetaType::QVector4D, 1, params));
 }
 
@@ -419,7 +419,7 @@ Value QtObject::method_quaternion(QV4::SimpleCallContext *ctx)
     sxyz[3] = ctx->arguments[3].toNumber();
 
     const void *params[] = { sxyz };
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     return v8engine->fromVariant(QQml_valueTypeProvider()->createValueType(QMetaType::QQuaternion, 1, params));
 }
 
@@ -432,7 +432,7 @@ matrix values.
 */
 Value QtObject::method_matrix4x4(QV4::SimpleCallContext *ctx)
 {
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     if (ctx->argumentCount == 1 && ctx->arguments[0].isObject()) {
         bool ok = false;
@@ -486,7 +486,7 @@ Value QtObject::method_lighter(QV4::SimpleCallContext *ctx)
     if (ctx->argumentCount != 1 && ctx->argumentCount != 2)
         V4THROW_ERROR("Qt.lighter(): Invalid arguments");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     QVariant v = v8engine->toVariant(ctx->arguments[0], -1);
     if (v.userType() == QVariant::String) {
         bool ok = false;
@@ -525,7 +525,7 @@ Value QtObject::method_darker(QV4::SimpleCallContext *ctx)
     if (ctx->argumentCount != 1 && ctx->argumentCount != 2)
         V4THROW_ERROR("Qt.darker(): Invalid arguments");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     QVariant v = v8engine->toVariant(ctx->arguments[0], -1);
     if (v.userType() == QVariant::String) {
         bool ok = false;
@@ -573,7 +573,7 @@ Value QtObject::method_tint(QV4::SimpleCallContext *ctx)
     if (ctx->argumentCount != 2)
         V4THROW_ERROR("Qt.tint(): Invalid arguments");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     // base color
     QVariant v1 = v8engine->toVariant(ctx->arguments[0], -1);
@@ -623,7 +623,7 @@ Value QtObject::method_formatDate(QV4::SimpleCallContext *ctx)
     if (ctx->argumentCount < 1 || ctx->argumentCount > 2)
         V4THROW_ERROR("Qt.formatDate(): Invalid arguments");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     Qt::DateFormat enumFormat = Qt::DefaultLocaleShortDate;
     QDate date = v8engine->toVariant(ctx->arguments[0], -1).toDateTime().date();
@@ -666,7 +666,7 @@ Value QtObject::method_formatTime(QV4::SimpleCallContext *ctx)
     if (ctx->argumentCount < 1 || ctx->argumentCount > 2)
         V4THROW_ERROR("Qt.formatTime(): Invalid arguments");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     QVariant argVariant = v8engine->toVariant(ctx->arguments[0], -1);
     QTime time;
@@ -790,7 +790,7 @@ Value QtObject::method_formatDateTime(QV4::SimpleCallContext *ctx)
     if (ctx->argumentCount < 1 || ctx->argumentCount > 2)
         V4THROW_ERROR("Qt.formatDateTime(): Invalid arguments");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     Qt::DateFormat enumFormat = Qt::DefaultLocaleShortDate;
     QDateTime dt = v8engine->toVariant(ctx->arguments[0], -1).toDateTime();
@@ -822,7 +822,7 @@ Value QtObject::method_openUrlExternally(QV4::SimpleCallContext *ctx)
     if (ctx->argumentCount != 1)
         return QV4::Value::fromBoolean(false);
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     QUrl url(method_resolvedUrl(ctx).toQString());
     return v8engine->fromVariant(QQml_guiProvider()->openUrlExternally(url));
@@ -834,7 +834,7 @@ Value QtObject::method_openUrlExternally(QV4::SimpleCallContext *ctx)
 */
 Value QtObject::method_resolvedUrl(QV4::SimpleCallContext *ctx)
 {
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     QUrl url = v8engine->toVariant(ctx->arguments[0], -1).toUrl();
     QQmlEngine *e = v8engine->engine();
@@ -860,7 +860,7 @@ Value QtObject::method_fontFamilies(SimpleCallContext *ctx)
     if (ctx->argumentCount != 0)
         V4THROW_ERROR("Qt.fontFamilies(): Invalid arguments");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     return v8engine->fromVariant(QVariant(QQml_guiProvider()->fontFamilies()));
 }
 
@@ -915,7 +915,7 @@ QQmlEngine::quit() signal to the QCoreApplication::quit() slot.
 */
 Value QtObject::method_quit(SimpleCallContext *ctx)
 {
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     QQmlEnginePrivate::get(v8engine->engine())->sendQuit();
     return QV4::Value::undefinedValue();
@@ -973,7 +973,7 @@ Value QtObject::method_createQmlObject(SimpleCallContext *ctx)
         }
     };
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     QQmlEngine *engine = v8engine->engine();
 
     QQmlContextData *context = v8engine->callingContext();
@@ -1078,7 +1078,7 @@ Value QtObject::method_createComponent(SimpleCallContext *ctx)
     if (ctx->argumentCount < 1 || ctx->argumentCount > 3)
         ctx->throwError(invalidArgs);
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     QQmlEngine *engine = v8engine->engine();
 
     QQmlContextData *context = v8engine->callingContext();
@@ -1162,7 +1162,7 @@ Value QtObject::method_locale(SimpleCallContext *ctx)
     if (ctx->argumentCount == 1 && !ctx->arguments[0].isString())
         V4THROW_TYPE("locale(): argument (locale code) must be a string");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     if (ctx->argumentCount == 1)
         code = ctx->arguments[0].toQString();
 
@@ -1243,9 +1243,9 @@ Value QtObject::method_get_platform(SimpleCallContext *ctx)
 
     if (!qt->m_platform)
         // Only allocate a platform object once
-        qt->m_platform = new QQmlPlatform(ctx->engine->publicEngine);
+        qt->m_platform = new QQmlPlatform(ctx->engine->v8Engine->publicEngine());
 
-    return ctx->engine->publicEngine->handle()->newQObject(qt->m_platform);
+    return ctx->engine->v8Engine->newQObject(qt->m_platform);
 }
 
 Value QtObject::method_get_application(SimpleCallContext *ctx)
@@ -1260,15 +1260,15 @@ Value QtObject::method_get_application(SimpleCallContext *ctx)
 
     if (!qt->m_application)
         // Only allocate an application object once
-        qt->m_application = QQml_guiProvider()->application(ctx->engine->publicEngine);
+        qt->m_application = QQml_guiProvider()->application(ctx->engine->v8Engine->publicEngine());
 
-    return ctx->engine->publicEngine->handle()->newQObject(qt->m_application);
+    return ctx->engine->v8Engine->newQObject(qt->m_application);
 }
 
 #ifndef QT_NO_IM
 Value QtObject::method_get_inputMethod(SimpleCallContext *ctx)
 {
-    QV8Engine *engine = ctx->engine->publicEngine->handle();
+    QV8Engine *engine = ctx->engine->v8Engine;
     return engine->newQObject(QQml_guiProvider()->inputMethod(), QV8Engine::CppOwnership);
 }
 #endif
@@ -1422,7 +1422,7 @@ QV4::Value ConsoleObject::method_time(SimpleCallContext *ctx)
     if (ctx->argumentCount != 1)
         V4THROW_ERROR("console.time(): Invalid arguments");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     QString name = ctx->arguments[0].toQString();
     v8engine->startTimer(name);
@@ -1434,7 +1434,7 @@ QV4::Value ConsoleObject::method_timeEnd(SimpleCallContext *ctx)
     if (ctx->argumentCount != 1)
         V4THROW_ERROR("console.time(): Invalid arguments");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     QString name = ctx->arguments[0].toQString();
     bool wasRunning;
@@ -1453,7 +1453,7 @@ QV4::Value ConsoleObject::method_count(SimpleCallContext *ctx)
         name = ctx->arguments[0].toQString();
 
     QV4::ExecutionEngine *v4 = ctx->engine;
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
 
     QV4::ExecutionEngine::StackFrame frame = v4->currentStackFrame();
 
@@ -1664,7 +1664,7 @@ Value GlobalExtensions::method_qsTr(SimpleCallContext *ctx)
     if ((ctx->argumentCount > 2) && !ctx->arguments[2].isNumber())
         V4THROW_ERROR("qsTr(): third argument (n) must be a number");
 
-    QV8Engine *v8engine = ctx->engine->publicEngine->handle();
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     QQmlContextData *ctxt = v8engine->callingContext();
 
     QString path = ctxt->url.toString();
index 094a38d..f6b67fe 100644 (file)
@@ -98,7 +98,7 @@ QV8Engine::QV8Engine(QJSEngine* qq)
 
     m_v4Engine = new QV4::ExecutionEngine;
     v8::Isolate::SetEngine(m_v4Engine);
-    m_v4Engine->publicEngine = q;
+    m_v4Engine->v8Engine = this;
 
     m_qobjectWrapper.init(this);
 }
index b7c07ee..1b06d7f 100644 (file)
@@ -222,7 +222,7 @@ class Q_QML_PRIVATE_EXPORT QV8Engine
     typedef QSet<QV4::Object *> V8ObjectSet;
 public:
     static QV8Engine* get(QJSEngine* q) { Q_ASSERT(q); return q->handle(); }
-    static QJSEngine* get(QV8Engine* d) { Q_ASSERT(d); return d->q; }
+//    static QJSEngine* get(QV8Engine* d) { Q_ASSERT(d); return d->q; }
     static QV4::ExecutionEngine *getV4(QJSEngine *q) { return q->handle()->m_v4Engine; }
     static QV4::ExecutionEngine *getV4(QV8Engine *d) { return d->m_v4Engine; }
 
@@ -239,6 +239,7 @@ public:
     void initQmlGlobalObject();
     void setEngine(QQmlEngine *engine);
     QQmlEngine *engine() { return m_engine; }
+    QJSEngine *publicEngine() { return q; }
     QV4::Value global();
 
     QV8QObjectWrapper *qobjectWrapper() { return &m_qobjectWrapper; }
index c5d9b22..2f2dcd6 100644 (file)
@@ -144,7 +144,7 @@ Value QObjectWrapper::getQmlProperty(ExecutionContext *ctx, String *name, QObjec
     }
 
     QHashedV4String propertystring(QV4::Value::fromString(name));
-    QV8Engine *v8Engine = QV8Engine::get(ctx->engine->publicEngine);
+    QV8Engine *v8Engine = ctx->engine->v8Engine;
 
     QQmlContextData *context = QV4::QmlContextWrapper::callingContext(ctx->engine);
 
@@ -178,7 +178,7 @@ Value QObjectWrapper::getQmlProperty(ExecutionContext *ctx, String *name, QObjec
 
 QV4::Value QObjectWrapper::wrap(ExecutionEngine *engine, QQmlData *ddata, QObject *object)
 {
-    QQmlEngine *qmlEngine = qobject_cast<QQmlEngine*>(engine->publicEngine);
+    QQmlEngine *qmlEngine = engine->v8Engine->engine();
     if (!ddata->propertyCache && qmlEngine) {
         ddata->propertyCache = QQmlEnginePrivate::get(qmlEngine)->cache(object);
         if (ddata->propertyCache) ddata->propertyCache->addref();
@@ -205,7 +205,7 @@ void QObjectWrapper::put(Managed *m, ExecutionContext *ctx, String *name, const
     QHashedV4String propertystring(QV4::Value::fromString(name));
 
     QQmlContextData *context = QV4::QmlContextWrapper::callingContext(ctx->engine);
-    QV8Engine *v8engine = QV8Engine::get(ctx->engine->publicEngine);
+    QV8Engine *v8engine = ctx->engine->v8Engine;
     bool result = QV8QObjectWrapper::SetProperty(v8engine, object, propertystring, context, value, QV4::QObjectWrapper::IgnoreRevision);
 
     if (!result) {
@@ -224,7 +224,7 @@ QV4::Value QObjectWrapper::enumerateProperties(Object *object)
 
     QStringList result;
 
-    QV8Engine *v8Engine = QV8Engine::get(that->engine()->publicEngine);
+    QV8Engine *v8Engine = that->engine()->v8Engine;
     QQmlEnginePrivate *ep = v8Engine->engine()
             ? QQmlEnginePrivate::get(v8Engine->engine())
             : 0;
@@ -745,7 +745,7 @@ static void FastValueSetter(v8::Handle<v8::String>, v8::Handle<v8::Value> value,
 
     Q_ASSERT(pdata->isWritable() || pdata->isQList());
 
-    StoreProperty(QV8Engine::get(wrapper->engine()->publicEngine), object, pdata, value);
+    StoreProperty(wrapper->engine()->v8Engine, object, pdata, value);
 }
 
 static void FastValueSetterReadOnly(v8::Handle<v8::String> property, v8::Handle<v8::Value>,
@@ -756,7 +756,7 @@ static void FastValueSetterReadOnly(v8::Handle<v8::String> property, v8::Handle<
     if (QQmlData::wasDeleted(wrapper->object()))
         return; 
 
-    QV8Engine *v8engine = QV8Engine::get(wrapper->engine()->publicEngine);
+    QV8Engine *v8engine = wrapper->engine()->v8Engine;
 
     QString error = QLatin1String("Cannot assign to read-only property \"") +
                     property->v4Value().toQString() + QLatin1Char('\"');
@@ -995,8 +995,7 @@ QV4::Value QV8QObjectWrapper::Connect(SimpleCallContext *ctx)
     if (ctx->argumentCount == 0)
         V4THROW_ERROR("Function.prototype.connect: no arguments given");
 
-    // ### Eliminate, won't work within worker scripts
-    QV8Engine *engine = QV8Engine::get(ctx->engine->publicEngine);
+    QV8Engine *engine = ctx->engine->v8Engine;
 
     QPair<QObject *, int> signalInfo = ExtractQtSignal(engine, ctx->thisObject);
     QObject *signalObject = signalInfo.first;
@@ -1055,8 +1054,7 @@ QV4::Value QV8QObjectWrapper::Disconnect(SimpleCallContext *ctx)
     if (ctx->argumentCount == 0)
         V4THROW_ERROR("Function.prototype.disconnect: no arguments given");
 
-    // ### Eliminate, won't work within worker scripts
-    QV8Engine *engine = QV8Engine::get(ctx->engine->publicEngine);
+    QV8Engine *engine = ctx->engine->v8Engine;
 
     QPair<QObject *, int> signalInfo = ExtractQtSignal(engine, ctx->thisObject);
     QObject *signalObject = signalInfo.first;
@@ -1334,7 +1332,7 @@ static int MatchScore(v8::Handle<v8::Value> actual, int conversionType)
         }
     } else if (actual->IsObject()) {
         QV4::Object *obj = actual->v4Value().asObject();
-        QV8Engine *engine = obj->engine()->publicEngine->handle();
+        QV8Engine *engine = obj->engine()->v8Engine;
 
         if (QV4::VariantObject *v = obj->as<QV4::VariantObject>()) {
             if (conversionType == qMetaTypeId<QVariant>())
@@ -1868,7 +1866,7 @@ Value QObjectMethod::callInternal(ExecutionContext *context, const Value &thisOb
     if (!ddata)
         return QV4::Value::undefinedValue();
 
-    QV8Engine *v8Engine = QV8Engine::get(context->engine->publicEngine);
+    QV8Engine *v8Engine = context->engine->v8Engine;
 
     QQmlPropertyData method;
 
index f05d8e4..f832cb8 100644 (file)
@@ -197,6 +197,7 @@ private:
 QQuickWorkerScriptEnginePrivate::WorkerEngine::WorkerEngine(QQuickWorkerScriptEnginePrivate *parent) 
 : QV8Engine(0), p(parent), accessManager(0)
 {
+    m_v4Engine->v8Engine = this;
 }
 
 QQuickWorkerScriptEnginePrivate::WorkerEngine::~WorkerEngine() 
@@ -272,7 +273,7 @@ QQuickWorkerScriptEnginePrivate::QQuickWorkerScriptEnginePrivate(QQmlEngine *eng
 
 QV4::Value QQuickWorkerScriptEnginePrivate::sendMessage(QV4::SimpleCallContext *ctx)
 {
-    WorkerEngine *engine = (WorkerEngine*)ctx->engine->publicEngine->handle();
+    WorkerEngine *engine = (WorkerEngine*)ctx->engine->v8Engine;
 
     int id = ctx->argument(1).toInt32();