Introduced Name::identifier().

Name::identifier() returns the identifier used to declare the name.
This commit is contained in:
Roberto Raggi
2009-05-28 11:49:59 +02:00
parent 6ec0b2591e
commit a1ec4e2a94
7 changed files with 53 additions and 30 deletions

View File

@@ -63,6 +63,8 @@ public:
Name();
virtual ~Name();
virtual Identifier *identifier() const = 0;
bool isNameId() const;
bool isTemplateNameId() const;
bool isDestructorNameId() const;

View File

@@ -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();

View File

@@ -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

View File

@@ -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; }

View File

@@ -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;