aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--abstractmetabuilder.cpp13
-rw-r--r--typesystem.h24
2 files changed, 37 insertions, 0 deletions
diff --git a/abstractmetabuilder.cpp b/abstractmetabuilder.cpp
index d6b348ae3..0f3e5461b 100644
--- a/abstractmetabuilder.cpp
+++ b/abstractmetabuilder.cpp
@@ -909,6 +909,19 @@ AbstractMetaEnum *AbstractMetaBuilder::traverseEnum(EnumModelItem enumItem, Abst
metaEnum->setOriginalAttributes(metaEnum->attributes());
+ // Register all enum values on Type database
+ TypeDatabase* typeDb = TypeDatabase::instance();
+ foreach(EnumeratorModelItem e, enumItem->enumerators()) {
+ QString name;
+ if (enclosing) {
+ name += enclosing->name();
+ name += "::";
+ }
+ name += e->name();
+ EnumValueTypeEntry* enumValue = new EnumValueTypeEntry(name, e->value(), static_cast<EnumTypeEntry*>(typeEntry));
+ typeDb->addType(enumValue);
+ }
+
return metaEnum;
}
diff --git a/typesystem.h b/typesystem.h
index dc7ebc0a7..4c5570726 100644
--- a/typesystem.h
+++ b/typesystem.h
@@ -569,6 +569,7 @@ public:
VarargsType,
FlagsType,
EnumType,
+ EnumValue,
TemplateArgumentType,
ThreadType,
BasicValueType,
@@ -688,6 +689,14 @@ public:
{
return m_type == TypeSystemType;
}
+ bool isFunction() const
+ {
+ return m_type == FunctionType;
+ }
+ bool isEnumValue() const
+ {
+ return m_type == EnumValue;
+ }
virtual bool preferredConversion() const
{
@@ -1211,6 +1220,21 @@ private:
bool m_forceInteger;
};
+class APIEXTRACTOR_API EnumValueTypeEntry : public TypeEntry
+{
+public:
+ EnumValueTypeEntry(const QString& name, const QString& value, const EnumTypeEntry* enclosingEnum)
+ : TypeEntry(name, TypeEntry::EnumValue), m_value(value), m_enclosingEnum(enclosingEnum)
+ {
+ }
+
+ QString value() const { return m_value; }
+ const EnumTypeEntry* enclosingEnum() const { return m_enclosingEnum; }
+private:
+ QString m_value;
+ const EnumTypeEntry* m_enclosingEnum;
+};
+
class APIEXTRACTOR_API FlagsTypeEntry : public TypeEntry
{
public: