diff options
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r-- | src/shared/cplusplus/Name.h | 2 | ||||
-rw-r--r-- | src/shared/cplusplus/Names.cpp | 14 | ||||
-rw-r--r-- | src/shared/cplusplus/Names.h | 10 | ||||
-rw-r--r-- | src/shared/cplusplus/Symbol.cpp | 8 | ||||
-rw-r--r-- | src/shared/cplusplus/Symbol.h | 3 |
5 files changed, 34 insertions, 3 deletions
diff --git a/src/shared/cplusplus/Name.h b/src/shared/cplusplus/Name.h index e58fd86d7e..ad871ea1da 100644 --- a/src/shared/cplusplus/Name.h +++ b/src/shared/cplusplus/Name.h @@ -63,6 +63,8 @@ public: Name(); virtual ~Name(); + virtual Identifier *identifier() const = 0; + bool isNameId() const; bool isTemplateNameId() const; bool isDestructorNameId() const; diff --git a/src/shared/cplusplus/Names.cpp b/src/shared/cplusplus/Names.cpp index d3ae0a69b4..a6911415f4 100644 --- a/src/shared/cplusplus/Names.cpp +++ b/src/shared/cplusplus/Names.cpp @@ -73,6 +73,14 @@ QualifiedNameId::~QualifiedNameId() void QualifiedNameId::accept0(NameVisitor *visitor) { visitor->visit(this); } +Identifier *QualifiedNameId::identifier() const +{ + if (Name *u = unqualifiedNameId()) + return u->identifier(); + + return 0; +} + unsigned QualifiedNameId::nameCount() const { return _nameCount; } @@ -225,6 +233,9 @@ void OperatorNameId::accept0(NameVisitor *visitor) int OperatorNameId::kind() const { return _kind; } +Identifier *OperatorNameId::identifier() const +{ return 0; } + bool OperatorNameId::isEqualTo(const Name *other) const { const OperatorNameId *o = other->asOperatorNameId(); @@ -246,6 +257,9 @@ void ConversionNameId::accept0(NameVisitor *visitor) FullySpecifiedType ConversionNameId::type() const { return _type; } +Identifier *ConversionNameId::identifier() const +{ return 0; } + bool ConversionNameId::isEqualTo(const Name *other) const { const ConversionNameId *c = other->asConversionNameId(); diff --git a/src/shared/cplusplus/Names.h b/src/shared/cplusplus/Names.h index e872aa0eee..3d0d1d0b9d 100644 --- a/src/shared/cplusplus/Names.h +++ b/src/shared/cplusplus/Names.h @@ -64,6 +64,8 @@ public: bool isGlobal = false); virtual ~QualifiedNameId(); + virtual Identifier *identifier() const; + unsigned nameCount() const; Name *nameAt(unsigned index) const; Name *const *names() const; @@ -94,7 +96,7 @@ public: NameId(Identifier *identifier); virtual ~NameId(); - Identifier *identifier() const; + virtual Identifier *identifier() const; virtual bool isEqualTo(const Name *other) const; @@ -117,7 +119,7 @@ public: DestructorNameId(Identifier *identifier); virtual ~DestructorNameId(); - Identifier *identifier() const; + virtual Identifier *identifier() const; virtual bool isEqualTo(const Name *other) const; @@ -142,7 +144,7 @@ public: unsigned templateArgumentCount); virtual ~TemplateNameId(); - Identifier *identifier() const; + virtual Identifier *identifier() const; // ### find a better name unsigned templateArgumentCount() const; @@ -229,6 +231,7 @@ public: int kind() const; + virtual Identifier *identifier() const; virtual bool isEqualTo(const Name *other) const; virtual const OperatorNameId *asOperatorNameId() const @@ -252,6 +255,7 @@ public: FullySpecifiedType type() const; + virtual Identifier *identifier() const; virtual bool isEqualTo(const Name *other) const; virtual const ConversionNameId *asConversionNameId() const diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp index 68b19c54e9..a012cca8ad 100644 --- a/src/shared/cplusplus/Symbol.cpp +++ b/src/shared/cplusplus/Symbol.cpp @@ -296,6 +296,14 @@ void Symbol::setName(Name *name) } } +Identifier *Symbol::identifier() const +{ + if (_name) + return _name->identifier(); + + return 0; +} + Scope *Symbol::scope() const { return _scope; } diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h index 4db5d297c2..c5cc484f10 100644 --- a/src/shared/cplusplus/Symbol.h +++ b/src/shared/cplusplus/Symbol.h @@ -125,6 +125,9 @@ public: /// Sets this Symbol's name. void setName(Name *name); // ### dangerous + /// Returns this Symbol's (optional) identifier + Identifier *identifier() const; + /// Returns this Symbol's storage class specifier. int storage() const; |