aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2017-01-27 14:06:02 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2017-01-27 17:17:46 +0000
commitf7fb80aec8180f1b7999bc8b0179862d122cea92 (patch)
tree9ebce978d2e08471028ebc0f96233b3527e83139
parentf21eb8877cc9aa2abc742e9d863811c5a6e8e5b0 (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.cpp5
-rw-r--r--ApiExtractor/parser/codemodel.cpp13
-rw-r--r--ApiExtractor/parser/codemodel.h24
-rw-r--r--ApiExtractor/parser/compiler_utils.cpp2
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());