diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2017-01-27 14:06:02 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2017-01-27 17:17:46 +0000 |
commit | f7fb80aec8180f1b7999bc8b0179862d122cea92 (patch) | |
tree | 9ebce978d2e08471028ebc0f96233b3527e83139 | |
parent | f21eb8877cc9aa2abc742e9d863811c5a6e8e5b0 (diff) |
TypeInfo: Introduce enumeration for reference types
Replace bool by an enumeration containing RValueReference as
introduced in C++ 11.
The old parser only handles LRValueReference.
Task-number: PYSIDE-323
Change-Id: I87779a4cbf062b242e94321d59c0e0a5a9ab3cdf
Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r-- | ApiExtractor/abstractmetabuilder.cpp | 5 | ||||
-rw-r--r-- | ApiExtractor/parser/codemodel.cpp | 13 | ||||
-rw-r--r-- | ApiExtractor/parser/codemodel.h | 24 | ||||
-rw-r--r-- | ApiExtractor/parser/compiler_utils.cpp | 2 |
4 files changed, 27 insertions, 17 deletions
diff --git a/ApiExtractor/abstractmetabuilder.cpp b/ApiExtractor/abstractmetabuilder.cpp index d0b106da0..12930a588 100644 --- a/ApiExtractor/abstractmetabuilder.cpp +++ b/ApiExtractor/abstractmetabuilder.cpp @@ -2333,7 +2333,7 @@ AbstractMetaType *AbstractMetaBuilderPrivate::translateType(const TypeInfo &_typ newInfo.setConstant(typei.isConstant()); newInfo.setFunctionPointer(typei.isFunctionPointer()); newInfo.setQualifiedName(typei.qualifiedName()); - newInfo.setReference(typei.isReference()); + newInfo.setReferenceType(typei.referenceType()); newInfo.setVolatile(typei.isVolatile()); AbstractMetaType* elementType = translateType(newInfo, ok); @@ -2463,7 +2463,8 @@ AbstractMetaType *AbstractMetaBuilderPrivate::translateType(const TypeInfo &_typ foreach (const TypeParser::Info &ta, typeInfo.template_instantiations) { TypeInfo info; info.setConstant(ta.is_constant); - info.setReference(ta.is_reference); + if (ta.is_reference) + info.setReferenceType(TypeInfo::LValueReference); info.setIndirections(ta.indirections); info.setFunctionPointer(false); diff --git a/ApiExtractor/parser/codemodel.cpp b/ApiExtractor/parser/codemodel.cpp index 14b40225e..d143eac6f 100644 --- a/ApiExtractor/parser/codemodel.cpp +++ b/ApiExtractor/parser/codemodel.cpp @@ -141,7 +141,8 @@ TypeInfo TypeInfo::combine(const TypeInfo &__lhs, const TypeInfo &__rhs) __result.setConstant(__result.isConstant() || __rhs.isConstant()); __result.setVolatile(__result.isVolatile() || __rhs.isVolatile()); - __result.setReference(__result.isReference() || __rhs.isReference()); + if (__rhs.referenceType() > __result.referenceType()) + __result.setReferenceType(__rhs.referenceType()); __result.setIndirections(__result.indirections() + __rhs.indirections()); __result.setArrayElements(__result.arrayElements() + __rhs.arrayElements()); @@ -201,8 +202,16 @@ QString TypeInfo::toString() const if (indirections()) tmp += QString(indirections(), QLatin1Char('*')); - if (isReference()) + switch (referenceType()) { + case NoReference: + break; + case TypeInfo::LValueReference: tmp += QLatin1Char('&'); + break; + case TypeInfo::RValueReference: + tmp += QLatin1String("&&"); + break; + } if (isFunctionPointer()) { tmp += QLatin1String(" (*)("); diff --git a/ApiExtractor/parser/codemodel.h b/ApiExtractor/parser/codemodel.h index 401219acf..9b945db6e 100644 --- a/ApiExtractor/parser/codemodel.h +++ b/ApiExtractor/parser/codemodel.h @@ -97,7 +97,13 @@ QDebug operator<<(QDebug d, const CodeModel *m); class TypeInfo { public: - TypeInfo() : flags(0) {} + enum ReferenceType { + NoReference, + LValueReference, + RValueReference + }; + + TypeInfo() : flags(0), m_referenceType(NoReference) {} QStringList qualifiedName() const { @@ -129,15 +135,8 @@ public: m_volatile = is; } - bool isReference() const - { - return m_reference; - } - - void setReference(bool is) - { - m_reference = is; - } + ReferenceType referenceType() const { return m_referenceType; } + void setReferenceType(ReferenceType r) { m_referenceType = r; } int indirections() const { @@ -206,12 +205,13 @@ private: struct { uint m_constant: 1; uint m_volatile: 1; - uint m_reference: 1; uint m_functionPointer: 1; uint m_indirections: 6; - uint m_padding: 22; + uint m_padding: 23; }; }; + + ReferenceType m_referenceType; }; #ifndef QT_NO_DEBUG_STREAM diff --git a/ApiExtractor/parser/compiler_utils.cpp b/ApiExtractor/parser/compiler_utils.cpp index 36a565e17..06100f91e 100644 --- a/ApiExtractor/parser/compiler_utils.cpp +++ b/ApiExtractor/parser/compiler_utils.cpp @@ -47,7 +47,7 @@ TypeInfo CompilerUtils::typeDescription(TypeSpecifierAST *type_specifier, Declar typeInfo.setQualifiedName(type_cc.qualifiedName()); typeInfo.setConstant(type_cc.isConstant()); typeInfo.setVolatile(type_cc.isVolatile()); - typeInfo.setReference(decl_cc.isReference()); + typeInfo.setReferenceType(decl_cc.isReference() ? TypeInfo::LValueReference : TypeInfo::NoReference); typeInfo.setIndirections(decl_cc.indirection()); typeInfo.setArrayElements(decl_cc.arrayElements()); |