Reimplemented Name::as*() using virtual functions.

This commit is contained in:
Roberto Raggi
2009-02-09 16:32:56 +01:00
parent 2f90539211
commit 17d047ced8
3 changed files with 54 additions and 54 deletions

View File

@@ -63,58 +63,22 @@ Name::~Name()
{ } { }
bool Name::isNameId() const bool Name::isNameId() const
{ return dynamic_cast<const NameId *>(this) != 0; } { return asNameId() != 0; }
bool Name::isTemplateNameId() const bool Name::isTemplateNameId() const
{ return dynamic_cast<const TemplateNameId *>(this) != 0; } { return asTemplateNameId() != 0; }
bool Name::isDestructorNameId() const bool Name::isDestructorNameId() const
{ return dynamic_cast<const DestructorNameId *>(this) != 0; } { return asDestructorNameId() != 0; }
bool Name::isOperatorNameId() const bool Name::isOperatorNameId() const
{ return dynamic_cast<const OperatorNameId *>(this) != 0; } { return asOperatorNameId() != 0; }
bool Name::isConversionNameId() const bool Name::isConversionNameId() const
{ return dynamic_cast<const ConversionNameId *>(this) != 0; } { return asConversionNameId() != 0; }
bool Name::isQualifiedNameId() const bool Name::isQualifiedNameId() const
{ return dynamic_cast<const QualifiedNameId *>(this) != 0; } { return asQualifiedNameId() != 0; }
const NameId *Name::asNameId() const
{ return dynamic_cast<const NameId *>(this); }
const TemplateNameId *Name::asTemplateNameId() const
{ return dynamic_cast<const TemplateNameId *>(this); }
const DestructorNameId *Name::asDestructorNameId() const
{ return dynamic_cast<const DestructorNameId *>(this); }
const OperatorNameId *Name::asOperatorNameId() const
{ return dynamic_cast<const OperatorNameId *>(this); }
const ConversionNameId *Name::asConversionNameId() const
{ return dynamic_cast<const ConversionNameId *>(this); }
const QualifiedNameId *Name::asQualifiedNameId() const
{ return dynamic_cast<const QualifiedNameId *>(this); }
NameId *Name::asNameId()
{ return dynamic_cast<NameId *>(this); }
TemplateNameId *Name::asTemplateNameId()
{ return dynamic_cast<TemplateNameId *>(this); }
DestructorNameId *Name::asDestructorNameId()
{ return dynamic_cast<DestructorNameId *>(this); }
OperatorNameId *Name::asOperatorNameId()
{ return dynamic_cast<OperatorNameId *>(this); }
ConversionNameId *Name::asConversionNameId()
{ return dynamic_cast<ConversionNameId *>(this); }
QualifiedNameId *Name::asQualifiedNameId()
{ return dynamic_cast<QualifiedNameId *>(this); }
void Name::accept(NameVisitor *visitor) void Name::accept(NameVisitor *visitor)
{ {

View File

@@ -74,19 +74,19 @@ public:
bool isConversionNameId() const; bool isConversionNameId() const;
bool isQualifiedNameId() const; bool isQualifiedNameId() const;
const NameId *asNameId() const; virtual const NameId *asNameId() const { return 0; }
const TemplateNameId *asTemplateNameId() const; virtual const TemplateNameId *asTemplateNameId() const { return 0; }
const DestructorNameId *asDestructorNameId() const; virtual const DestructorNameId *asDestructorNameId() const { return 0; }
const OperatorNameId *asOperatorNameId() const; virtual const OperatorNameId *asOperatorNameId() const { return 0; }
const ConversionNameId *asConversionNameId() const; virtual const ConversionNameId *asConversionNameId() const { return 0; }
const QualifiedNameId *asQualifiedNameId() const; virtual const QualifiedNameId *asQualifiedNameId() const { return 0; }
NameId *asNameId(); virtual NameId *asNameId() { return 0; }
TemplateNameId *asTemplateNameId(); virtual TemplateNameId *asTemplateNameId() { return 0; }
DestructorNameId *asDestructorNameId(); virtual DestructorNameId *asDestructorNameId() { return 0; }
OperatorNameId *asOperatorNameId(); virtual OperatorNameId *asOperatorNameId() { return 0; }
ConversionNameId *asConversionNameId(); virtual ConversionNameId *asConversionNameId() { return 0; }
QualifiedNameId *asQualifiedNameId(); virtual QualifiedNameId *asQualifiedNameId() { return 0; }
virtual bool isEqualTo(const Name *other) const = 0; virtual bool isEqualTo(const Name *other) const = 0;

View File

@@ -77,6 +77,12 @@ public:
virtual bool isEqualTo(const Name *other) const; virtual bool isEqualTo(const Name *other) const;
virtual const QualifiedNameId *asQualifiedNameId() const
{ return this; }
virtual QualifiedNameId *asQualifiedNameId()
{ return this; }
protected: protected:
virtual void accept0(NameVisitor *visitor); virtual void accept0(NameVisitor *visitor);
@@ -96,6 +102,12 @@ public:
virtual bool isEqualTo(const Name *other) const; virtual bool isEqualTo(const Name *other) const;
virtual const NameId *asNameId() const
{ return this; }
virtual NameId *asNameId()
{ return this; }
protected: protected:
virtual void accept0(NameVisitor *visitor); virtual void accept0(NameVisitor *visitor);
@@ -113,6 +125,12 @@ public:
virtual bool isEqualTo(const Name *other) const; virtual bool isEqualTo(const Name *other) const;
virtual const DestructorNameId *asDestructorNameId() const
{ return this; }
virtual DestructorNameId *asDestructorNameId()
{ return this; }
protected: protected:
virtual void accept0(NameVisitor *visitor); virtual void accept0(NameVisitor *visitor);
@@ -137,6 +155,12 @@ public:
virtual bool isEqualTo(const Name *other) const; virtual bool isEqualTo(const Name *other) const;
virtual const TemplateNameId *asTemplateNameId() const
{ return this; }
virtual TemplateNameId *asTemplateNameId()
{ return this; }
protected: protected:
virtual void accept0(NameVisitor *visitor); virtual void accept0(NameVisitor *visitor);
@@ -211,6 +235,12 @@ public:
virtual bool isEqualTo(const Name *other) const; virtual bool isEqualTo(const Name *other) const;
virtual const OperatorNameId *asOperatorNameId() const
{ return this; }
virtual OperatorNameId *asOperatorNameId()
{ return this; }
protected: protected:
virtual void accept0(NameVisitor *visitor); virtual void accept0(NameVisitor *visitor);
@@ -228,6 +258,12 @@ public:
virtual bool isEqualTo(const Name *other) const; virtual bool isEqualTo(const Name *other) const;
virtual const ConversionNameId *asConversionNameId() const
{ return this; }
virtual ConversionNameId *asConversionNameId()
{ return this; }
protected: protected:
virtual void accept0(NameVisitor *visitor); virtual void accept0(NameVisitor *visitor);