diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-10-16 13:12:31 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-10-23 05:39:55 +0000 |
commit | 3aa406eb69290686b6a1693abd33d9abb419ae20 (patch) | |
tree | cf53ee3d84f7a3d6deec0deada51e9d39fc633fe /sources/shiboken2/generator/shiboken2/overloaddata.h | |
parent | 7c448f5c27a51a60e27a54b79e298b53312ef2a8 (diff) |
shiboken2: AbstractMetaType: use QSharedData[Pointer]
Previously, shiboken2 kept AbstractMetaType by a raw pointer. The data
were copied numerous times by AbstractMetaType::copy() when adding the
inherited functions to a AbstractMetaClass or specializing templates,
sometimes with a bool flag indicating ownership.
To get rid of the copies and ownership issues, change the type
to be based on QSharedData[Pointer]. It can then be passed
around and treated like a C++ value type, with Qt sharing the
data when possible behind the scenes.
- Extract AbstractMetaType to a separate header/source
- Remove unused AbstractMetaType::setInstantiationInCpp()
- Remove unused member m_package
- Rewrite the comparison of AbstractMetaType which
becomes relevant for checking/detaching to do a complete
comparison. It was previously unused, intended for
a different implementation of view types with special cases.
- Rework debug formatting
- Invalid meta types are indicated by the "Invalid" usage pattern
instead of null pointers
Change-Id: Ic4b1feecafb4f0355f39e178c2703b104e45cf6c
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/shiboken2/generator/shiboken2/overloaddata.h')
-rw-r--r-- | sources/shiboken2/generator/shiboken2/overloaddata.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sources/shiboken2/generator/shiboken2/overloaddata.h b/sources/shiboken2/generator/shiboken2/overloaddata.h index 9ffb084ff..8c165a0be 100644 --- a/sources/shiboken2/generator/shiboken2/overloaddata.h +++ b/sources/shiboken2/generator/shiboken2/overloaddata.h @@ -52,7 +52,7 @@ public: int maxArgs() const { return m_headOverloadData->m_maxArgs; } int argPos() const { return m_argPos; } - const AbstractMetaType *argType() const { return m_argType; } + const AbstractMetaType &argType() const { return m_argType; } /// Returns a string list containing all the possible return types (including void) for the current OverloadData. QStringList returnTypes() const; @@ -133,7 +133,7 @@ public: private: OverloadData(OverloadData *headOverloadData, const AbstractMetaFunction *func, - const AbstractMetaType *argType, int argPos); + const AbstractMetaType &argType, int argPos); void addOverload(const AbstractMetaFunction *func); OverloadData *addOverloadData(const AbstractMetaFunction *func, const AbstractMetaArgument *arg); @@ -147,7 +147,7 @@ private: int m_minArgs; int m_maxArgs; int m_argPos; - const AbstractMetaType *m_argType; + AbstractMetaType m_argType; QString m_argTypeReplaced; MetaFunctionList m_overloads; |