aboutsummaryrefslogtreecommitdiffstats
path: root/Types.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Types.cpp')
-rw-r--r--Types.cpp20
1 files changed, 7 insertions, 13 deletions
diff --git a/Types.cpp b/Types.cpp
index 418d6b17..f2543160 100644
--- a/Types.cpp
+++ b/Types.cpp
@@ -682,19 +682,6 @@ string EnumType::toString() const
return string("enum ") + m_enum.getName();
}
-MemberList const& EnumType::getMembers() const
-{
- // We need to lazy-initialize it because of recursive references.
- if (!m_members)
- {
- map<string, shared_ptr<Type const>> members;
- for (ASTPointer<EnumDeclaration> const& enumValue: m_enum.getMembers())
- members.insert(make_pair(enumValue->getName(), make_shared<EnumType>(m_enum)));
- m_members.reset(new MemberList(members));
- }
- return *m_members;
-}
-
FunctionType::FunctionType(FunctionDefinition const& _function, bool _isInternal):
m_location(_isInternal ? Location::Internal : Location::External),
m_isConstant(_function.isDeclaredConst()),
@@ -957,6 +944,13 @@ MemberList const& TypeType::getMembers() const
if (!f->isConstructor() && !f->getName().empty())
members[f->getName()] = make_shared<FunctionType>(*f);
}
+ else if (m_actualType->getCategory() == Category::Enum)
+ {
+ EnumDefinition const& enumDef = dynamic_cast<EnumType const&>(*m_actualType).getEnumDefinition();
+ for (ASTPointer<EnumDeclaration> const& enumValue: enumDef.getMembers())
+ members.insert(make_pair(enumValue->getName(), make_shared<EnumType>(enumDef)));
+ m_members.reset(new MemberList(members));
+ }
m_members.reset(new MemberList(members));
}
return *m_members;