diff options
author | Olivier Goffart <ogoffart@woboq.com> | 2019-12-05 16:14:14 +0100 |
---|---|---|
committer | Olivier Goffart <ogoffart@woboq.com> | 2020-02-25 15:43:15 +0100 |
commit | 46f407126ef3e94d59254012cdc34d6a4ad2faf2 (patch) | |
tree | 56444e40c2342e69d4aac99d0c44b207d8516c93 /src/corelib/kernel/qmetaobjectbuilder.cpp | |
parent | a68e4f3b96a82a93898f381e8ddc7f50f9c89d40 (diff) |
MetaObject: store the QMetaType of the properties
Change-Id: I563e7232b70e94de4184f2c23a581319313dcf5c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel/qmetaobjectbuilder.cpp')
-rw-r--r-- | src/corelib/kernel/qmetaobjectbuilder.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/corelib/kernel/qmetaobjectbuilder.cpp b/src/corelib/kernel/qmetaobjectbuilder.cpp index d02708540a..cd5caad0a7 100644 --- a/src/corelib/kernel/qmetaobjectbuilder.cpp +++ b/src/corelib/kernel/qmetaobjectbuilder.cpp @@ -1196,6 +1196,7 @@ static int buildMetaObject(QMetaObjectBuilderPrivate *d, char *buf, if (!relocatable) meta->d.superdata = d->superClass; meta->d.relatedMetaObjects = nullptr; meta->d.extradata = nullptr; + meta->d.metaTypes = nullptr; meta->d.static_metacall = d->staticMetacallFunction; } @@ -1474,6 +1475,20 @@ static int buildMetaObject(QMetaObjectBuilderPrivate *d, char *buf, size += sizeof(SuperData) * (d->relatedMetaObjects.size() + 1); } + if (d->properties.size() > 0) { + ALIGN(size, QtPrivate::QMetaTypeInterface *); + auto types = reinterpret_cast<QtPrivate::QMetaTypeInterface **>(buf + size); + if (buf) { + meta->d.metaTypes = types; + for (const auto &prop : d->properties) { + QMetaType mt(QMetaType::type(prop.type)); + *types = reinterpret_cast<QtPrivate::QMetaTypeInterface *&>(mt); + types++; + } + } + size += sizeof(QMetaType) * d->properties.size(); + } + // Align the final size and return it. ALIGN(size, void *); Q_ASSERT(!buf || size == expectedSize); |