diff options
Diffstat (limited to 'src/qml/qml/qqmlvmemetaobject.cpp')
-rw-r--r-- | src/qml/qml/qqmlvmemetaobject.cpp | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp index d2cbb99b6a..490a4e19ab 100644 --- a/src/qml/qml/qqmlvmemetaobject.cpp +++ b/src/qml/qml/qqmlvmemetaobject.cpp @@ -325,9 +325,12 @@ QQmlVMEMetaObject::QQmlVMEMetaObject(QObject *obj, if (compiledObject->nProperties || compiledObject->nFunctions) { Q_ASSERT(cache && cache->engine); QV4::ExecutionEngine *v4 = cache->engine; - QV4::Heap::MemberData *data = QV4::MemberData::allocate(v4, compiledObject->nProperties + compiledObject->nFunctions); - propertyAndMethodStorage.set(v4, data); - std::fill(data->data, data->data + data->size, QV4::Encode::undefined()); + uint size = compiledObject->nProperties + compiledObject->nFunctions; + if (size) { + QV4::Heap::MemberData *data = QV4::MemberData::allocate(v4, size); + propertyAndMethodStorage.set(v4, data); + std::fill(data->data, data->data + data->size, QV4::Encode::undefined()); + } // Need JS wrapper to ensure properties/methods are marked. ensureQObjectWrapper(); @@ -343,7 +346,7 @@ QQmlVMEMetaObject::~QQmlVMEMetaObject() qDeleteAll(varObjectGuards); } -QV4::MemberData *QQmlVMEMetaObject::propertyAndMethodStorageAsMemberData() +QV4::MemberData *QQmlVMEMetaObject::propertyAndMethodStorageAsMemberData() const { if (propertyAndMethodStorage.isUndefined()) { if (propertyAndMethodStorage.valueRef()) @@ -442,7 +445,7 @@ void QQmlVMEMetaObject::writeProperty(int id, QObject* v) guard->setGuardedValue(v, this, id); } -int QQmlVMEMetaObject::readPropertyAsInt(int id) +int QQmlVMEMetaObject::readPropertyAsInt(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -455,7 +458,7 @@ int QQmlVMEMetaObject::readPropertyAsInt(int id) return sv->integerValue(); } -bool QQmlVMEMetaObject::readPropertyAsBool(int id) +bool QQmlVMEMetaObject::readPropertyAsBool(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -468,7 +471,7 @@ bool QQmlVMEMetaObject::readPropertyAsBool(int id) return sv->booleanValue(); } -double QQmlVMEMetaObject::readPropertyAsDouble(int id) +double QQmlVMEMetaObject::readPropertyAsDouble(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -481,7 +484,7 @@ double QQmlVMEMetaObject::readPropertyAsDouble(int id) return sv->doubleValue(); } -QString QQmlVMEMetaObject::readPropertyAsString(int id) +QString QQmlVMEMetaObject::readPropertyAsString(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -494,7 +497,7 @@ QString QQmlVMEMetaObject::readPropertyAsString(int id) return QString(); } -QUrl QQmlVMEMetaObject::readPropertyAsUrl(int id) +QUrl QQmlVMEMetaObject::readPropertyAsUrl(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -508,7 +511,7 @@ QUrl QQmlVMEMetaObject::readPropertyAsUrl(int id) return v->d()->data().value<QUrl>(); } -QDate QQmlVMEMetaObject::readPropertyAsDate(int id) +QDate QQmlVMEMetaObject::readPropertyAsDate(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -536,7 +539,7 @@ QDateTime QQmlVMEMetaObject::readPropertyAsDateTime(int id) return v->d()->data().value<QDateTime>(); } -QSizeF QQmlVMEMetaObject::readPropertyAsSizeF(int id) +QSizeF QQmlVMEMetaObject::readPropertyAsSizeF(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -550,7 +553,7 @@ QSizeF QQmlVMEMetaObject::readPropertyAsSizeF(int id) return v->d()->data().value<QSizeF>(); } -QPointF QQmlVMEMetaObject::readPropertyAsPointF(int id) +QPointF QQmlVMEMetaObject::readPropertyAsPointF(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -564,7 +567,7 @@ QPointF QQmlVMEMetaObject::readPropertyAsPointF(int id) return v->d()->data().value<QPointF>(); } -QObject* QQmlVMEMetaObject::readPropertyAsQObject(int id) +QObject* QQmlVMEMetaObject::readPropertyAsQObject(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -578,7 +581,7 @@ QObject* QQmlVMEMetaObject::readPropertyAsQObject(int id) return wrapper->object(); } -QList<QObject *> *QQmlVMEMetaObject::readPropertyAsList(int id) +QList<QObject *> *QQmlVMEMetaObject::readPropertyAsList(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -594,7 +597,7 @@ QList<QObject *> *QQmlVMEMetaObject::readPropertyAsList(int id) return static_cast<QList<QObject *> *>(v->d()->data().data()); } -QRectF QQmlVMEMetaObject::readPropertyAsRectF(int id) +QRectF QQmlVMEMetaObject::readPropertyAsRectF(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (!md) @@ -976,7 +979,7 @@ int QQmlVMEMetaObject::metaCall(QObject *o, QMetaObject::Call c, int _id, void * #pragma optimize("", on) #endif -QV4::ReturnedValue QQmlVMEMetaObject::method(int index) +QV4::ReturnedValue QQmlVMEMetaObject::method(int index) const { if (!ctxt || !ctxt->isValid() || !compiledObject) { qWarning("QQmlVMEMetaObject: Internal error - attempted to evaluate a function in an invalid context"); @@ -990,7 +993,7 @@ QV4::ReturnedValue QQmlVMEMetaObject::method(int index) return (md->data() + index + compiledObject->nProperties)->asReturnedValue(); } -QV4::ReturnedValue QQmlVMEMetaObject::readVarProperty(int id) +QV4::ReturnedValue QQmlVMEMetaObject::readVarProperty(int id) const { Q_ASSERT(compiledObject && compiledObject->propertyTable()[id].type == QV4::CompiledData::Property::Var); @@ -1000,7 +1003,7 @@ QV4::ReturnedValue QQmlVMEMetaObject::readVarProperty(int id) return QV4::Primitive::undefinedValue().asReturnedValue(); } -QVariant QQmlVMEMetaObject::readPropertyAsVariant(int id) +QVariant QQmlVMEMetaObject::readPropertyAsVariant(int id) const { QV4::MemberData *md = propertyAndMethodStorageAsMemberData(); if (md) { @@ -1107,7 +1110,7 @@ void QQmlVMEMetaObject::writeProperty(int id, const QVariant &value) } } -QV4::ReturnedValue QQmlVMEMetaObject::vmeMethod(int index) +QV4::ReturnedValue QQmlVMEMetaObject::vmeMethod(int index) const { if (index < methodOffset()) { Q_ASSERT(parentVMEMetaObject()); @@ -1139,7 +1142,7 @@ void QQmlVMEMetaObject::setVmeMethod(int index, const QV4::Value &function) *(md->data() + methodIndex + compiledObject->nProperties) = function; } -QV4::ReturnedValue QQmlVMEMetaObject::vmeProperty(int index) +QV4::ReturnedValue QQmlVMEMetaObject::vmeProperty(int index) const { if (index < propOffset()) { Q_ASSERT(parentVMEMetaObject()); |