aboutsummaryrefslogtreecommitdiffstats
path: root/parser
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-09-20 11:36:45 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-09 19:10:09 -0300
commit5179bca73955373e087d6b51edcabf038c964ac8 (patch)
tree255a4ca87763fb6c203ee31aa91815a6c0d8f548 /parser
parentc182be3e4c89fe81c15722708d8b712598a528b8 (diff)
Anonymous enums now supported.
Diffstat (limited to 'parser')
-rw-r--r--parser/binder.cpp4
-rw-r--r--parser/codemodel.cpp10
-rw-r--r--parser/codemodel.h3
3 files changed, 16 insertions, 1 deletions
diff --git a/parser/binder.cpp b/parser/binder.cpp
index 8b6c4c024..faace02ca 100644
--- a/parser/binder.cpp
+++ b/parser/binder.cpp
@@ -657,7 +657,8 @@ void Binder::visitEnumSpecifier(EnumSpecifierAST *node)
name_cc.run(node->name);
QString name = name_cc.name();
- if (name.isEmpty()) {
+ bool isAnonymous = name.isEmpty();
+ if (isAnonymous) {
// anonymous enum
QString key = _M_context.join("::");
int current = ++_M_anonymous_enums[key];
@@ -669,6 +670,7 @@ void Binder::visitEnumSpecifier(EnumSpecifierAST *node)
_M_current_enum->setAccessPolicy(_M_current_access);
updateItemPosition(_M_current_enum->toItem(), node);
_M_current_enum->setName(name);
+ _M_current_enum->setAnonymous(isAnonymous);
_M_current_enum->setScope(enumScope->qualifiedName());
_M_qualified_types[_M_current_enum->qualifiedName().join(".")] = QString();
diff --git a/parser/codemodel.cpp b/parser/codemodel.cpp
index 419471505..0cc14fcce 100644
--- a/parser/codemodel.cpp
+++ b/parser/codemodel.cpp
@@ -727,6 +727,16 @@ void _EnumModelItem::removeEnumerator(EnumeratorModelItem item)
_M_enumerators.removeAt(_M_enumerators.indexOf(item));
}
+bool _EnumModelItem::isAnonymous() const
+{
+ return _M_anonymous;
+}
+
+void _EnumModelItem::setAnonymous(bool anonymous)
+{
+ _M_anonymous = anonymous;
+}
+
// ---------------------------------------------------------------------------
QString _EnumeratorModelItem::value() const
{
diff --git a/parser/codemodel.h b/parser/codemodel.h
index 3ea94480f..f87f57a35 100644
--- a/parser/codemodel.h
+++ b/parser/codemodel.h
@@ -736,6 +736,8 @@ public:
EnumeratorList enumerators() const;
void addEnumerator(EnumeratorModelItem item);
void removeEnumerator(EnumeratorModelItem item);
+ bool isAnonymous() const;
+ void setAnonymous(bool anonymous);
protected:
_EnumModelItem(CodeModel *model, int kind = __node_kind)
@@ -745,6 +747,7 @@ protected:
private:
CodeModel::AccessPolicy _M_accessPolicy;
EnumeratorList _M_enumerators;
+ bool _M_anonymous;
private:
_EnumModelItem(const _EnumModelItem &other);