diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2021-05-07 09:21:23 +0200 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2021-05-07 21:50:58 +0200 |
commit | 300dec66ce18b63a08027ef9f200117e87902274 (patch) | |
tree | ab4719e81ceff1f7268a358f93a4d7a289e73c92 /src/corelib/kernel | |
parent | d5c3e1336bce42df53d4b525237244486ba5422d (diff) |
QMetaMethod: Store method constness in metaobject system
[ChangeLog][QtCore][QMetaMethod] It is now possible to query the
constness of a method with QMetaMethod::isConst.
Change-Id: I8a94480b8074ef5b30555aeccd64937c4c6d97d4
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 17 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobject.h | 1 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobject_p.h | 5 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobjectbuilder.cpp | 22 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobjectbuilder_p.h | 3 |
5 files changed, 47 insertions, 1 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index a574bec179..b09fe933e6 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -2140,6 +2140,23 @@ int QMetaMethod::revision() const } /*! + \since 6.2 + + Returns whether the method is const qualified. + + \note This method might errorneously return \false for a const method + if it belongs to a library compiled against an older version of Qt. + */ +bool QMetaMethod::isConst() const +{ + if (!mobj) + return false; + if (QMetaObjectPrivate::get(mobj)->revision < 10) + return false; + return data.flags() & MethodIsConst; +} + +/*! Returns the access specification of this method (private, protected, or public). diff --git a/src/corelib/kernel/qmetaobject.h b/src/corelib/kernel/qmetaobject.h index 1e9a0097fb..6fe259868f 100644 --- a/src/corelib/kernel/qmetaobject.h +++ b/src/corelib/kernel/qmetaobject.h @@ -77,6 +77,7 @@ public: int methodIndex() const; int relativeMethodIndex() const; int revision() const; + bool isConst() const; inline const QMetaObject *enclosingMetaObject() const { return mobj; } diff --git a/src/corelib/kernel/qmetaobject_p.h b/src/corelib/kernel/qmetaobject_p.h index e35d0b5e0c..35aa6ea6b9 100644 --- a/src/corelib/kernel/qmetaobject_p.h +++ b/src/corelib/kernel/qmetaobject_p.h @@ -98,7 +98,9 @@ enum MethodFlags { MethodCompatibility = 0x10, MethodCloned = 0x20, MethodScriptable = 0x40, - MethodRevisioned = 0x80 + MethodRevisioned = 0x80, + + MethodIsConst = 0x100, // no use case for volatile so far }; enum MetaObjectFlag { @@ -173,6 +175,7 @@ struct QMetaObjectPrivate // revision 8 is Qt 5.12: It adds the enum name to QMetaEnum // revision 9 is Qt 6.0: It adds the metatype of properties and methods // revision 10 is Qt 6.2: The metatype of the metaobject is stored in the metatypes array + // and metamethods store a flag stating whether they are const enum { OutputRevision = 10 }; // Used by moc, qmetaobjectbuilder and qdbus enum { IntsPerMethod = QMetaMethod::Data::Size }; enum { IntsPerEnum = QMetaEnum::Data::Size }; diff --git a/src/corelib/kernel/qmetaobjectbuilder.cpp b/src/corelib/kernel/qmetaobjectbuilder.cpp index d46adf05fb..8513805ef4 100644 --- a/src/corelib/kernel/qmetaobjectbuilder.cpp +++ b/src/corelib/kernel/qmetaobjectbuilder.cpp @@ -1743,6 +1743,28 @@ void QMetaMethodBuilder::setAttributes(int value) } /*! + Returns true if the method is const qualified. + */ +int QMetaMethodBuilder::isConst() const +{ + QMetaMethodBuilderPrivate *d = d_func(); + if (!d) + return false; + return (d->attributes & MethodIsConst); +} + +void QMetaMethodBuilder::setConst(bool methodIsConst) +{ + QMetaMethodBuilderPrivate *d = d_func(); + if (!d) + return; + if (methodIsConst) + d->attributes |= MethodIsConst; + else + d->attributes &= ~MethodIsConst; +} + +/*! Returns the revision of this method. \sa setRevision() diff --git a/src/corelib/kernel/qmetaobjectbuilder_p.h b/src/corelib/kernel/qmetaobjectbuilder_p.h index 0435e9cd97..429a05238e 100644 --- a/src/corelib/kernel/qmetaobjectbuilder_p.h +++ b/src/corelib/kernel/qmetaobjectbuilder_p.h @@ -204,6 +204,9 @@ public: int attributes() const; void setAttributes(int value); + int isConst() const; + void setConst(bool methodIsConst=true); + int revision() const; void setRevision(int revision); |