diff options
Diffstat (limited to 'src/qml/qml/qqmlcontextwrapper.cpp')
-rw-r--r-- | src/qml/qml/qqmlcontextwrapper.cpp | 77 |
1 files changed, 41 insertions, 36 deletions
diff --git a/src/qml/qml/qqmlcontextwrapper.cpp b/src/qml/qml/qqmlcontextwrapper.cpp index a5574b706a..83ef8c6230 100644 --- a/src/qml/qml/qqmlcontextwrapper.cpp +++ b/src/qml/qml/qqmlcontextwrapper.cpp @@ -61,15 +61,18 @@ using namespace QV4; DEFINE_OBJECT_VTABLE(QmlContextWrapper); -QmlContextWrapper::QmlContextWrapper(QV8Engine *engine, QQmlContextData *context, QObject *scopeObject, bool ownsContext) - : Object(QV8Engine::getV4(engine)), - readOnly(true), ownsContext(ownsContext), isNullWrapper(false), - context(context), scopeObject(scopeObject), idObjectsWrapper(0) +QmlContextWrapper::Data::Data(QV8Engine *engine, QQmlContextData *context, QObject *scopeObject, bool ownsContext) + : Object::Data(QV8Engine::getV4(engine)) + , readOnly(true) + , ownsContext(ownsContext) + , isNullWrapper(false) + , context(context) + , scopeObject(scopeObject) { setVTable(staticVTable()); } -QmlContextWrapper::~QmlContextWrapper() +QmlContextWrapper::Data::~Data() { if (context && ownsContext) context->destroy(); @@ -80,7 +83,7 @@ ReturnedValue QmlContextWrapper::qmlScope(QV8Engine *v8, QQmlContextData *ctxt, ExecutionEngine *v4 = QV8Engine::getV4(v8); Scope valueScope(v4); - Scoped<QmlContextWrapper> w(valueScope, new (v4->memoryManager) QmlContextWrapper(v8, ctxt, scope)); + Scoped<QmlContextWrapper> w(valueScope, v4->memoryManager->alloc<QmlContextWrapper>(v8, ctxt, scope)); return w.asReturnedValue(); } @@ -94,8 +97,8 @@ ReturnedValue QmlContextWrapper::urlScope(QV8Engine *v8, const QUrl &url) context->isInternal = true; context->isJSContext = true; - Scoped<QmlContextWrapper> w(scope, new (v4->memoryManager) QmlContextWrapper(v8, context, 0, true)); - w->isNullWrapper = true; + Scoped<QmlContextWrapper> w(scope, v4->memoryManager->alloc<QmlContextWrapper>(v8, context, (QObject*)0, true)); + w->d()->isNullWrapper = true; return w.asReturnedValue(); } @@ -127,11 +130,11 @@ void QmlContextWrapper::takeContextOwnership(const ValueRef qmlglobal) Scope scope(v4); QV4::Scoped<QmlContextWrapper> c(scope, qmlglobal); Q_ASSERT(c); - c->ownsContext = true; + c->d()->ownsContext = true; } -ReturnedValue QmlContextWrapper::get(Managed *m, const StringRef name, bool *hasProperty) +ReturnedValue QmlContextWrapper::get(Managed *m, String *name, bool *hasProperty) { QV4::ExecutionEngine *v4 = m->engine(); QV4::Scope scope(v4); @@ -149,10 +152,10 @@ ReturnedValue QmlContextWrapper::get(Managed *m, const StringRef name, bool *has return result.asReturnedValue(); } - if (resource->isNullWrapper) + if (resource->d()->isNullWrapper) return Object::get(m, name, hasProperty); - if (QV4::QmlContextWrapper::callingContext(v4) != resource->context) + if (QV4::QmlContextWrapper::callingContext(v4) != resource->d()->context) return Object::get(m, name, hasProperty); result = Object::get(m, name, &hasProp); @@ -211,7 +214,7 @@ ReturnedValue QmlContextWrapper::get(Managed *m, const StringRef name, bool *has while (context) { // Search context properties if (context->propertyNames.count()) { - int propertyIdx = context->propertyNames.value(name.getPointer()); + int propertyIdx = context->propertyNames.value(name); if (propertyIdx != -1) { @@ -247,7 +250,7 @@ ReturnedValue QmlContextWrapper::get(Managed *m, const StringRef name, bool *has if (scopeObject) { bool hasProp = false; QV4::ScopedValue result(scope, QV4::QObjectWrapper::getQmlProperty(v4->currentContext(), context, scopeObject, - name.getPointer(), QV4::QObjectWrapper::CheckRevision, &hasProp)); + name, QV4::QObjectWrapper::CheckRevision, &hasProp)); if (hasProp) { if (hasProperty) *hasProperty = true; @@ -260,7 +263,7 @@ ReturnedValue QmlContextWrapper::get(Managed *m, const StringRef name, bool *has // Search context object if (context->contextObject) { bool hasProp = false; - result = QV4::QObjectWrapper::getQmlProperty(v4->currentContext(), context, context->contextObject, name.getPointer(), QV4::QObjectWrapper::CheckRevision, &hasProp); + result = QV4::QObjectWrapper::getQmlProperty(v4->currentContext(), context, context->contextObject, name, QV4::QObjectWrapper::CheckRevision, &hasProp); if (hasProp) { if (hasProperty) *hasProperty = true; @@ -276,7 +279,7 @@ ReturnedValue QmlContextWrapper::get(Managed *m, const StringRef name, bool *has return Primitive::undefinedValue().asReturnedValue(); } -void QmlContextWrapper::put(Managed *m, const StringRef name, const ValueRef value) +void QmlContextWrapper::put(Managed *m, String *name, const ValueRef value) { ExecutionEngine *v4 = m->engine(); QV4::Scope scope(v4); @@ -295,11 +298,11 @@ void QmlContextWrapper::put(Managed *m, const StringRef name, const ValueRef val return; } - if (wrapper->isNullWrapper) { - if (wrapper && wrapper->readOnly) { + if (wrapper->d()->isNullWrapper) { + if (wrapper && wrapper->d()->readOnly) { QString error = QLatin1String("Invalid write to global property \"") + name->toQString() + QLatin1Char('"'); - Scoped<String> e(scope, v4->currentContext()->engine->newString(error)); + Scoped<String> e(scope, v4->currentContext()->d()->engine->newString(error)); v4->currentContext()->throwError(e); return; } @@ -322,18 +325,18 @@ void QmlContextWrapper::put(Managed *m, const StringRef name, const ValueRef val while (context) { // Search context properties - if (context->propertyNames.count() && -1 != context->propertyNames.value(name.getPointer())) + if (context->propertyNames.count() && -1 != context->propertyNames.value(name)) return; // Search scope object if (scopeObject && - QV4::QObjectWrapper::setQmlProperty(v4->currentContext(), context, scopeObject, name.getPointer(), QV4::QObjectWrapper::CheckRevision, value)) + QV4::QObjectWrapper::setQmlProperty(v4->currentContext(), context, scopeObject, name, QV4::QObjectWrapper::CheckRevision, value)) return; scopeObject = 0; // Search context object if (context->contextObject && - QV4::QObjectWrapper::setQmlProperty(v4->currentContext(), context, context->contextObject, name.getPointer(), QV4::QObjectWrapper::CheckRevision, value)) + QV4::QObjectWrapper::setQmlProperty(v4->currentContext(), context, context->contextObject, name, QV4::QObjectWrapper::CheckRevision, value)) return; context = context->parent; @@ -341,7 +344,7 @@ void QmlContextWrapper::put(Managed *m, const StringRef name, const ValueRef val expressionContext->unresolvedNames = true; - if (wrapper->readOnly) { + if (wrapper->d()->readOnly) { QString error = QLatin1String("Invalid write to global property \"") + name->toQString() + QLatin1Char('"'); v4->currentContext()->throwError(error); @@ -353,14 +356,14 @@ void QmlContextWrapper::put(Managed *m, const StringRef name, const ValueRef val void QmlContextWrapper::destroy(Managed *that) { - static_cast<QmlContextWrapper *>(that)->~QmlContextWrapper(); + static_cast<QmlContextWrapper *>(that)->d()->~Data(); } void QmlContextWrapper::markObjects(Managed *m, ExecutionEngine *engine) { QmlContextWrapper *This = static_cast<QmlContextWrapper*>(m); - if (This->idObjectsWrapper) - This->idObjectsWrapper->mark(engine); + if (This->d()->idObjectsWrapper) + This->d()->idObjectsWrapper->mark(engine); Object::markObjects(m, engine); } @@ -409,19 +412,21 @@ void QmlContextWrapper::registerQmlDependencies(ExecutionEngine *engine, const C ReturnedValue QmlContextWrapper::idObjectsArray() { - if (!idObjectsWrapper) { + if (!d()->idObjectsWrapper) { ExecutionEngine *v4 = engine(); - idObjectsWrapper = new (v4->memoryManager) QQmlIdObjectsArray(v4, this); + Scope scope(v4); + Scoped<QQmlIdObjectsArray> a(scope, v4->memoryManager->alloc<QQmlIdObjectsArray>(v4, this)); + d()->idObjectsWrapper = a.getPointer(); } - return idObjectsWrapper->asReturnedValue(); + return d()->idObjectsWrapper->asReturnedValue(); } -ReturnedValue QmlContextWrapper::qmlSingletonWrapper(QV8Engine *v8, const StringRef &name) +ReturnedValue QmlContextWrapper::qmlSingletonWrapper(QV8Engine *v8, String *name) { - if (!context->imports) + if (!d()->context->imports) return Encode::undefined(); // Search for attached properties, enums and imported scripts - QQmlTypeNameCache::Result r = context->imports->query(name); + QQmlTypeNameCache::Result r = d()->context->imports->query(name); Q_ASSERT(r.isValid()); Q_ASSERT(r.type); @@ -439,8 +444,8 @@ ReturnedValue QmlContextWrapper::qmlSingletonWrapper(QV8Engine *v8, const String DEFINE_OBJECT_VTABLE(QQmlIdObjectsArray); -QQmlIdObjectsArray::QQmlIdObjectsArray(ExecutionEngine *engine, QmlContextWrapper *contextWrapper) - : Object(engine) +QQmlIdObjectsArray::Data::Data(ExecutionEngine *engine, QmlContextWrapper *contextWrapper) + : Object::Data(engine) , contextWrapper(contextWrapper) { setVTable(staticVTable()); @@ -449,7 +454,7 @@ QQmlIdObjectsArray::QQmlIdObjectsArray(ExecutionEngine *engine, QmlContextWrappe ReturnedValue QQmlIdObjectsArray::getIndexed(Managed *m, uint index, bool *hasProperty) { QQmlIdObjectsArray *This = static_cast<QQmlIdObjectsArray*>(m); - QQmlContextData *context = This->contextWrapper->getContext(); + QQmlContextData *context = This->d()->contextWrapper->getContext(); if (!context) { if (hasProperty) *hasProperty = false; @@ -475,7 +480,7 @@ ReturnedValue QQmlIdObjectsArray::getIndexed(Managed *m, uint index, bool *hasPr void QQmlIdObjectsArray::markObjects(Managed *that, ExecutionEngine *engine) { QQmlIdObjectsArray *This = static_cast<QQmlIdObjectsArray*>(that); - This->contextWrapper->mark(engine); + This->d()->contextWrapper->mark(engine); Object::markObjects(that, engine); } |