diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2011-07-27 18:04:59 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-09 19:10:17 -0300 |
commit | b3644ccd1f52073ed70ce8b6e0ed4f58a07632d7 (patch) | |
tree | 9b444413f35daa050994b9133c29ad5410c5a0e0 | |
parent | 1a989347e029e9f90b5c2c727243a02d1c1aa496 (diff) |
Copied AbstractMetaBuilder::decideUsagePattern() method to AbstractMetaType.
The decideUsagePattern on AbstractMetaBuilder now calls the new
AbstractMetaType's method.
-rw-r--r-- | abstractmetabuilder.cpp | 85 | ||||
-rw-r--r-- | abstractmetalang.cpp | 87 | ||||
-rw-r--r-- | abstractmetalang.h | 3 |
3 files changed, 91 insertions, 84 deletions
diff --git a/abstractmetabuilder.cpp b/abstractmetabuilder.cpp index f4a469f..41e4abe 100644 --- a/abstractmetabuilder.cpp +++ b/abstractmetabuilder.cpp @@ -2233,90 +2233,7 @@ int AbstractMetaBuilder::findOutValueFromString(const QString& stringValue, bool void AbstractMetaBuilder::decideUsagePattern(AbstractMetaType *metaType) { - const TypeEntry* type = metaType->typeEntry(); - - if (type->isPrimitive() && (!metaType->actualIndirections() - || (metaType->isConstant() && metaType->isReference() && !metaType->indirections()))) { - metaType->setTypeUsagePattern(AbstractMetaType::PrimitivePattern); - - } else if (type->isVoid()) { - metaType->setTypeUsagePattern(AbstractMetaType::NativePointerPattern); - - } else if (type->isVarargs()) { - metaType->setTypeUsagePattern(AbstractMetaType::VarargsPattern); - - } else if (type->isString() - && metaType->indirections() == 0 - && (metaType->isConstant() == metaType->isReference() - || metaType->isConstant())) { - metaType->setTypeUsagePattern(AbstractMetaType::StringPattern); - - } else if (type->isChar() - && !metaType->indirections() - && metaType->isConstant() == metaType->isReference()) { - metaType->setTypeUsagePattern(AbstractMetaType::CharPattern); - - } else if (type->isJObjectWrapper() - && !metaType->indirections() - && metaType->isConstant() == metaType->isReference()) { - metaType->setTypeUsagePattern(AbstractMetaType::JObjectWrapperPattern); - - } else if (type->isVariant() - && !metaType->indirections() - && metaType->isConstant() == metaType->isReference()) { - metaType->setTypeUsagePattern(AbstractMetaType::VariantPattern); - - } else if (type->isEnum() && !metaType->actualIndirections()) { - metaType->setTypeUsagePattern(AbstractMetaType::EnumPattern); - - } else if (type->isObject() - && metaType->indirections() == 0 - && metaType->isReference()) { - if (((ComplexTypeEntry*) type)->isQObject()) - metaType->setTypeUsagePattern(AbstractMetaType::QObjectPattern); - else - metaType->setTypeUsagePattern(AbstractMetaType::ObjectPattern); - - } else if (type->isObject() - && metaType->indirections() == 1) { - if (((ComplexTypeEntry*) type)->isQObject()) - metaType->setTypeUsagePattern(AbstractMetaType::QObjectPattern); - else - metaType->setTypeUsagePattern(AbstractMetaType::ObjectPattern); - - // const-references to pointers can be passed as pointers - if (metaType->isReference() && metaType->isConstant()) { - metaType->setReference(false); - metaType->setConstant(false); - } - - } else if (type->isContainer() && !metaType->indirections()) { - metaType->setTypeUsagePattern(AbstractMetaType::ContainerPattern); - - } else if (type->isTemplateArgument()) { - - } else if (type->isFlags() - && !metaType->indirections() - && (metaType->isConstant() == metaType->isReference())) { - metaType->setTypeUsagePattern(AbstractMetaType::FlagsPattern); - - } else if (type->isArray()) { - metaType->setTypeUsagePattern(AbstractMetaType::ArrayPattern); - - } else if (type->isThread()) { - Q_ASSERT(metaType->indirections() == 1); - metaType->setTypeUsagePattern(AbstractMetaType::ThreadPattern); - } else if (type->isValue()) { - if (metaType->indirections() == 1) { - metaType->setTypeUsagePattern(AbstractMetaType::ValuePointerPattern); - } else { - metaType->setTypeUsagePattern(AbstractMetaType::ValuePattern); - } - } else { - metaType->setTypeUsagePattern(AbstractMetaType::NativePointerPattern); - ReportHandler::debugFull(QString("native pointer pattern for '%1'") - .arg(metaType->cppSignature())); - } + metaType->decideUsagePattern(); } QString AbstractMetaBuilder::fixDefaultValue(ArgumentModelItem item, AbstractMetaType* type, diff --git a/abstractmetalang.cpp b/abstractmetalang.cpp index 08aa860..106aed1 100644 --- a/abstractmetalang.cpp +++ b/abstractmetalang.cpp @@ -112,6 +112,93 @@ QString AbstractMetaType::cppSignature() const return m_cachedCppSignature; } +void AbstractMetaType::decideUsagePattern() +{ + const TypeEntry* type = typeEntry(); + + if (type->isPrimitive() && (!actualIndirections() + || (isConstant() && isReference() && !indirections()))) { + setTypeUsagePattern(AbstractMetaType::PrimitivePattern); + + } else if (type->isVoid()) { + setTypeUsagePattern(AbstractMetaType::NativePointerPattern); + + } else if (type->isVarargs()) { + setTypeUsagePattern(AbstractMetaType::VarargsPattern); + + } else if (type->isString() + && indirections() == 0 + && (isConstant() == isReference() + || isConstant())) { + setTypeUsagePattern(AbstractMetaType::StringPattern); + + } else if (type->isChar() + && !indirections() + && isConstant() == isReference()) { + setTypeUsagePattern(AbstractMetaType::CharPattern); + + } else if (type->isJObjectWrapper() + && !indirections() + && isConstant() == isReference()) { + setTypeUsagePattern(AbstractMetaType::JObjectWrapperPattern); + + } else if (type->isVariant() + && !indirections() + && isConstant() == isReference()) { + setTypeUsagePattern(AbstractMetaType::VariantPattern); + + } else if (type->isEnum() && !actualIndirections()) { + setTypeUsagePattern(AbstractMetaType::EnumPattern); + + } else if (type->isObject() + && indirections() == 0 + && isReference()) { + if (((ComplexTypeEntry*) type)->isQObject()) + setTypeUsagePattern(AbstractMetaType::QObjectPattern); + else + setTypeUsagePattern(AbstractMetaType::ObjectPattern); + + } else if (type->isObject() + && indirections() == 1) { + if (((ComplexTypeEntry*) type)->isQObject()) + setTypeUsagePattern(AbstractMetaType::QObjectPattern); + else + setTypeUsagePattern(AbstractMetaType::ObjectPattern); + + // const-references to pointers can be passed as pointers + if (isReference() && isConstant()) { + setReference(false); + setConstant(false); + } + + } else if (type->isContainer() && !indirections()) { + setTypeUsagePattern(AbstractMetaType::ContainerPattern); + + } else if (type->isTemplateArgument()) { + + } else if (type->isFlags() + && !indirections() + && (isConstant() == isReference())) { + setTypeUsagePattern(AbstractMetaType::FlagsPattern); + + } else if (type->isArray()) { + setTypeUsagePattern(AbstractMetaType::ArrayPattern); + + } else if (type->isThread()) { + Q_ASSERT(indirections() == 1); + setTypeUsagePattern(AbstractMetaType::ThreadPattern); + } else if (type->isValue()) { + if (indirections() == 1) { + setTypeUsagePattern(AbstractMetaType::ValuePointerPattern); + } else { + setTypeUsagePattern(AbstractMetaType::ValuePattern); + } + } else { + setTypeUsagePattern(AbstractMetaType::NativePointerPattern); + ReportHandler::debugFull(QString("native pointer pattern for '%1'") + .arg(cppSignature())); + } +} /******************************************************************************* * AbstractMetaArgument diff --git a/abstractmetalang.h b/abstractmetalang.h index b58a00f..a3a8def 100644 --- a/abstractmetalang.h +++ b/abstractmetalang.h @@ -589,6 +589,9 @@ public: return m_originalTemplateType; } + /// Decides and sets the proper usage patter for the current meta type. + void decideUsagePattern(); + private: const TypeEntry *m_typeEntry; AbstractMetaTypeList m_instantiations; |