aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-06-04 16:00:13 +0200
committerLars Knoll <lars.knoll@digia.com>2013-06-05 10:53:39 +0200
commitc0a79111f7c08b482338df05e047da1ddbf95c9b (patch)
tree752756f0e091ce00a83379ebf0113236219e37ea
parentba29371b9415e5a3d970edfbf6b3696b6a7f7b89 (diff)
Fix crashes in workerscript tests (qqmlecmascript and qquickworkerscript)
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>
-rw-r--r--src/imports/localstorage/plugin.cpp8
-rw-r--r--src/qml/qml/v4/qv4engine_p.h4
-rw-r--r--src/qml/qml/v4/qv4include.cpp2
-rw-r--r--src/qml/qml/v4/qv4sequenceobject.cpp2
-rw-r--r--src/qml/qml/v8/qjsengine.cpp2
-rw-r--r--src/qml/qml/v8/qjsvalue.cpp2
-rw-r--r--src/qml/qml/v8/qqmlbuiltinfunctions.cpp68
-rw-r--r--src/qml/qml/v8/qv8engine.cpp2
-rw-r--r--src/qml/qml/v8/qv8engine_p.h3
-rw-r--r--src/qml/qml/v8/qv8qobjectwrapper.cpp22
-rw-r--r--src/qml/types/qquickworkerscript.cpp3
11 files changed, 59 insertions, 59 deletions
diff --git a/src/imports/localstorage/plugin.cpp b/src/imports/localstorage/plugin.cpp
index 323b89b3e5..1c57b03b54 100644
--- a/src/imports/localstorage/plugin.cpp
+++ b/src/imports/localstorage/plugin.cpp
@@ -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)
diff --git a/src/qml/qml/v4/qv4engine_p.h b/src/qml/qml/v4/qv4engine_p.h
index a734e64f00..c137534701 100644
--- a/src/qml/qml/v4/qv4engine_p.h
+++ b/src/qml/qml/v4/qv4engine_p.h
@@ -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;
diff --git a/src/qml/qml/v4/qv4include.cpp b/src/qml/qml/v4/qv4include.cpp
index b834937906..0718f9bc8b 100644
--- a/src/qml/qml/v4/qv4include.cpp
+++ b/src/qml/qml/v4/qv4include.cpp
@@ -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)
diff --git a/src/qml/qml/v4/qv4sequenceobject.cpp b/src/qml/qml/v4/qv4sequenceobject.cpp
index 5a1c5b923d..53582018e4 100644
--- a/src/qml/qml/v4/qv4sequenceobject.cpp
+++ b/src/qml/qml/v4/qv4sequenceobject.cpp
@@ -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;
diff --git a/src/qml/qml/v8/qjsengine.cpp b/src/qml/qml/v8/qjsengine.cpp
index da214a04f7..d1a2c73f6f 100644
--- a/src/qml/qml/v8/qjsengine.cpp
+++ b/src/qml/qml/v8/qjsengine.cpp
@@ -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 {
diff --git a/src/qml/qml/v8/qjsvalue.cpp b/src/qml/qml/v8/qjsvalue.cpp
index 379177ed97..2fb3cc635d 100644
--- a/src/qml/qml/v8/qjsvalue.cpp
+++ b/src/qml/qml/v8/qjsvalue.cpp
@@ -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
diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
index 020a813718..ac2a2a003c 100644
--- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
+++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
@@ -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();
diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp
index 094a38d4b9..f6b67fee00 100644
--- a/src/qml/qml/v8/qv8engine.cpp
+++ b/src/qml/qml/v8/qv8engine.cpp
@@ -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);
}
diff --git a/src/qml/qml/v8/qv8engine_p.h b/src/qml/qml/v8/qv8engine_p.h
index b7c07ee3fe..1b06d7fb74 100644
--- a/src/qml/qml/v8/qv8engine_p.h
+++ b/src/qml/qml/v8/qv8engine_p.h
@@ -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; }
diff --git a/src/qml/qml/v8/qv8qobjectwrapper.cpp b/src/qml/qml/v8/qv8qobjectwrapper.cpp
index c5d9b22b75..2f2dcd6332 100644
--- a/src/qml/qml/v8/qv8qobjectwrapper.cpp
+++ b/src/qml/qml/v8/qv8qobjectwrapper.cpp
@@ -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;
diff --git a/src/qml/types/qquickworkerscript.cpp b/src/qml/types/qquickworkerscript.cpp
index f05d8e4e9b..f832cb8008 100644
--- a/src/qml/types/qquickworkerscript.cpp
+++ b/src/qml/types/qquickworkerscript.cpp
@@ -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();