Replace the call sites with calls to getQmlProperty on the QObjectWrapper.
Change-Id: I3dbc3788c8d1631d817f65c738f0a8a31deb2866
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
}
QQmlEnginePrivate *ep = QQmlEnginePrivate::get(engine->engine());
- QV8QObjectWrapper *qobjectWrapper = engine->qobjectWrapper();
while (context) {
// Search context properties
if (scopeObject) {
if (QV4::QObjectWrapper *o = QV4::QObjectWrapper::wrap(ctx->engine, scopeObject).as<QV4::QObjectWrapper>()) {
bool hasProp = false;
- QV4::Value result = o->getQmlProperty(o->engine()->current, propertystring.string().asString(), QV4::QObjectWrapper::CheckRevision, &hasProp);
+ QV4::Value result = o->getQmlProperty(ctx, context, name, QV4::QObjectWrapper::CheckRevision, &hasProp);
if (hasProp) {
if (hasProperty)
*hasProperty = true;
// Search context object
if (context->contextObject) {
- QV4::Value result = qobjectWrapper->getProperty(context->contextObject, propertystring,
- context, QV4::QObjectWrapper::CheckRevision)->v4Value();
- if (!result.isEmpty()) {
- if (hasProperty)
- *hasProperty = true;
- return result;
+ if (QV4::QObjectWrapper *o = QV4::QObjectWrapper::wrap(ctx->engine, context->contextObject).as<QV4::QObjectWrapper>()) {
+ bool hasProp = false;
+ QV4::Value result = o->getQmlProperty(ctx, context, name, QV4::QObjectWrapper::CheckRevision, &hasProp);
+ if (hasProp) {
+ if (hasProperty)
+ *hasProperty = true;
+ return result;
+ }
}
}
}
// check for property.
- return v8engine->qobjectWrapper()->getProperty(qobjectSingleton, propertystring, context, QV4::QObjectWrapper::IgnoreRevision)->v4Value();
+ if (QV4::QObjectWrapper *o = QV4::QObjectWrapper::wrap(ctx->engine, qobjectSingleton).as<QV4::QObjectWrapper>())
+ return o->getQmlProperty(ctx, context, name, QV4::QObjectWrapper::IgnoreRevision);
+ else
+ return QV4::Value::undefinedValue();
} else if (!siinfo->scriptApi(e).isUndefined()) {
QV4::ExecutionEngine *engine = QV8Engine::getV4(v8engine);
// NOTE: if used in a binding, changes will not trigger re-evaluation since non-NOTIFYable.
} else if (w->object) {
QObject *ao = qmlAttachedPropertiesObjectById(type->attachedPropertiesId(), object);
- if (ao)
- return v8engine->qobjectWrapper()->getProperty(ao, propertystring, context,
- QV4::QObjectWrapper::IgnoreRevision)->v4Value();
+ if (ao) {
+ QV4::QObjectWrapper *wrapper = QV4::QObjectWrapper::wrap(ctx->engine, ao).as<QV4::QObjectWrapper>();
+ if (wrapper)
+ return wrapper->getQmlProperty(ctx, context, name, QV4::QObjectWrapper::IgnoreRevision);
+ }
// Fall through to base implementation
}
#include <private/qqmlvaluetype_p.h>
#include <private/qqmlbinding_p.h>
#include <private/qqmlglobal_p.h>
+#include <private/qqmlcontextwrapper_p.h>
#include <private/qv4engine_p.h>
#include <private/qv4functionobject_p.h>
if (result->isFunction()) {
// calling a Q_INVOKABLE function of a value type
- QQmlContextData *context = r->v8->callingContext();
- return r->v8->qobjectWrapper()->getProperty(r->type, propertystring, context, QV4::QObjectWrapper::IgnoreRevision)->v4Value();
+ QQmlContextData *qmlContext = QV4::QmlContextWrapper::callingContext(ctx->engine);
+ return QV4::QObjectWrapper::wrap(ctx->engine, r->type).as<QV4::QObjectWrapper>()->getQmlProperty(ctx, qmlContext, name, QV4::QObjectWrapper::IgnoreRevision);
}
#define VALUE_TYPE_LOAD(metatype, cpptype, constructor) \
}
}
-Value QObjectWrapper::getQmlProperty(ExecutionContext *ctx, String *name, QObjectWrapper::RevisionMode revisionMode, bool *hasProperty, bool includeImports)
+Value QObjectWrapper::getQmlProperty(ExecutionContext *ctx, QQmlContextData *qmlContext, String *name, QObjectWrapper::RevisionMode revisionMode, bool *hasProperty, bool includeImports)
{
if (QQmlData::wasDeleted(m_object)) {
if (hasProperty)
QHashedV4String propertystring(QV4::Value::fromString(name));
QV8Engine *v8Engine = ctx->engine->v8Engine;
- QQmlContextData *context = QV4::QmlContextWrapper::callingContext(ctx->engine);
-
- v8::Handle<v8::Value> result = QV8QObjectWrapper::GetProperty(v8Engine, m_object, propertystring, context, revisionMode);
+ v8::Handle<v8::Value> result = QV8QObjectWrapper::GetProperty(v8Engine, m_object, propertystring, qmlContext, revisionMode);
if (!result.IsEmpty()) {
if (hasProperty)
*hasProperty = true;
if (includeImports && name->startsWithUpper()) {
// Check for attached properties
- if (context && context->imports) {
- QQmlTypeNameCache::Result r = context->imports->query(propertystring);
+ if (qmlContext && qmlContext->imports) {
+ QQmlTypeNameCache::Result r = qmlContext->imports->query(propertystring);
if (r.isValid()) {
if (r.scriptIndex != -1) {
} else if (r.type) {
return QmlTypeWrapper::create(v8Engine, m_object, r.type, QmlTypeWrapper::ExcludeEnums);
} else if (r.importNamespace) {
- return QmlTypeWrapper::create(v8Engine, m_object, context->imports, r.importNamespace, QmlTypeWrapper::ExcludeEnums);
+ return QmlTypeWrapper::create(v8Engine, m_object, qmlContext->imports, r.importNamespace, QmlTypeWrapper::ExcludeEnums);
}
Q_ASSERT(!"Unreachable");
}
QV4::Value QObjectWrapper::get(Managed *m, ExecutionContext *ctx, String *name, bool *hasProperty)
{
QObjectWrapper *that = static_cast<QObjectWrapper*>(m);
- return that->getQmlProperty(ctx, name, IgnoreRevision, hasProperty, /*includeImports*/ true);
+ QQmlContextData *qmlContext = QV4::QmlContextWrapper::callingContext(ctx->engine);
+ return that->getQmlProperty(ctx, qmlContext, name, IgnoreRevision, hasProperty, /*includeImports*/ true);
}
void QObjectWrapper::put(Managed *m, ExecutionContext *ctx, String *name, const Value &value)
void deleteQObject(bool deleteInstantly = false);
- Value getQmlProperty(ExecutionContext *ctx, String *name, RevisionMode revisionMode, bool *hasProperty = 0, bool includeImports = false);
+ Value getQmlProperty(ExecutionContext *ctx, QQmlContextData *qmlContext, String *name, RevisionMode revisionMode, bool *hasProperty = 0, bool includeImports = false);
static Value wrap(ExecutionEngine *engine, QObject *object);
void init(QV8Engine *);
void destroy();
- inline v8::Handle<v8::Value> getProperty(QObject *, const QHashedV4String &, QQmlContextData *, QV4::QObjectWrapper::RevisionMode);
inline bool setProperty(QObject *, const QHashedV4String &, QQmlContextData *, v8::Handle<v8::Value>, QV4::QObjectWrapper::RevisionMode);
private:
QV8Engine *m_engine;
};
-v8::Handle<v8::Value> QV8QObjectWrapper::getProperty(QObject *object, const QHashedV4String &string,
- QQmlContextData *context, QV4::QObjectWrapper::RevisionMode mode)
-{
- QQmlData *dd = QQmlData::get(object, false);
- if (!dd || !dd->propertyCache ||
- dd->propertyCache->property(string, object, context)) {
- return GetProperty(m_engine, object, string, context, mode);
- } else {
- return v8::Handle<v8::Value>();
- }
-}
-
bool QV8QObjectWrapper::setProperty(QObject *object, const QHashedV4String &string,
QQmlContextData *context, v8::Handle<v8::Value> value, QV4::QObjectWrapper::RevisionMode mode)
{