From 17d047ced8966bb377a0937a35ab299f86e654a6 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <qtc-committer@nokia.com>
Date: Mon, 9 Feb 2009 16:32:56 +0100
Subject: [PATCH] Reimplemented Name::as*() using virtual functions.

---
 src/shared/cplusplus/Name.cpp | 48 +++++------------------------------
 src/shared/cplusplus/Name.h   | 24 +++++++++---------
 src/shared/cplusplus/Names.h  | 36 ++++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 54 deletions(-)

diff --git a/src/shared/cplusplus/Name.cpp b/src/shared/cplusplus/Name.cpp
index 89e875a93cb..476a1eff488 100644
--- a/src/shared/cplusplus/Name.cpp
+++ b/src/shared/cplusplus/Name.cpp
@@ -63,58 +63,22 @@ Name::~Name()
 { }
 
 bool Name::isNameId() const
-{ return dynamic_cast<const NameId *>(this) != 0; }
+{ return asNameId() != 0; }
 
 bool Name::isTemplateNameId() const
-{ return dynamic_cast<const TemplateNameId *>(this) != 0; }
+{ return asTemplateNameId() != 0; }
 
 bool Name::isDestructorNameId() const
-{ return dynamic_cast<const DestructorNameId *>(this) != 0; }
+{ return asDestructorNameId() != 0; }
 
 bool Name::isOperatorNameId() const
-{ return dynamic_cast<const OperatorNameId *>(this) != 0; }
+{ return asOperatorNameId() != 0; }
 
 bool Name::isConversionNameId() const
-{ return dynamic_cast<const ConversionNameId *>(this) != 0; }
+{ return asConversionNameId() != 0; }
 
 bool Name::isQualifiedNameId() const
-{ return dynamic_cast<const QualifiedNameId *>(this) != 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); }
+{ return asQualifiedNameId() != 0; }
 
 void Name::accept(NameVisitor *visitor)
 {
diff --git a/src/shared/cplusplus/Name.h b/src/shared/cplusplus/Name.h
index 1f30a285166..6fd73d305f2 100644
--- a/src/shared/cplusplus/Name.h
+++ b/src/shared/cplusplus/Name.h
@@ -74,19 +74,19 @@ public:
     bool isConversionNameId() const;
     bool isQualifiedNameId() const;
 
-    const NameId *asNameId() const;
-    const TemplateNameId *asTemplateNameId() const;
-    const DestructorNameId *asDestructorNameId() const;
-    const OperatorNameId *asOperatorNameId() const;
-    const ConversionNameId *asConversionNameId() const;
-    const QualifiedNameId *asQualifiedNameId() const;
+    virtual const NameId *asNameId() const { return 0; }
+    virtual const TemplateNameId *asTemplateNameId() const { return 0; }
+    virtual const DestructorNameId *asDestructorNameId() const { return 0; }
+    virtual const OperatorNameId *asOperatorNameId() const { return 0; }
+    virtual const ConversionNameId *asConversionNameId() const { return 0; }
+    virtual const QualifiedNameId *asQualifiedNameId() const { return 0; }
 
-    NameId *asNameId();
-    TemplateNameId *asTemplateNameId();
-    DestructorNameId *asDestructorNameId();
-    OperatorNameId *asOperatorNameId();
-    ConversionNameId *asConversionNameId();
-    QualifiedNameId *asQualifiedNameId();
+    virtual NameId *asNameId() { return 0; }
+    virtual TemplateNameId *asTemplateNameId() { return 0; }
+    virtual DestructorNameId *asDestructorNameId() { return 0; }
+    virtual OperatorNameId *asOperatorNameId() { return 0; }
+    virtual ConversionNameId *asConversionNameId() { return 0; }
+    virtual QualifiedNameId *asQualifiedNameId() { return 0; }
 
     virtual bool isEqualTo(const Name *other) const = 0;
 
diff --git a/src/shared/cplusplus/Names.h b/src/shared/cplusplus/Names.h
index 86e6813c6c2..1423c4b96fb 100644
--- a/src/shared/cplusplus/Names.h
+++ b/src/shared/cplusplus/Names.h
@@ -77,6 +77,12 @@ public:
 
     virtual bool isEqualTo(const Name *other) const;
 
+    virtual const QualifiedNameId *asQualifiedNameId() const
+    { return this; }
+
+    virtual QualifiedNameId *asQualifiedNameId()
+    { return this; }
+
 protected:
     virtual void accept0(NameVisitor *visitor);
 
@@ -96,6 +102,12 @@ public:
 
     virtual bool isEqualTo(const Name *other) const;
 
+    virtual const NameId *asNameId() const
+    { return this; }
+
+    virtual NameId *asNameId()
+    { return this; }
+
 protected:
     virtual void accept0(NameVisitor *visitor);
 
@@ -113,6 +125,12 @@ public:
 
     virtual bool isEqualTo(const Name *other) const;
 
+    virtual const DestructorNameId *asDestructorNameId() const
+    { return this; }
+
+    virtual DestructorNameId *asDestructorNameId()
+    { return this; }
+
 protected:
     virtual void accept0(NameVisitor *visitor);
 
@@ -137,6 +155,12 @@ public:
 
     virtual bool isEqualTo(const Name *other) const;
 
+    virtual const TemplateNameId *asTemplateNameId() const
+    { return this; }
+
+    virtual TemplateNameId *asTemplateNameId()
+    { return this; }
+
 protected:
     virtual void accept0(NameVisitor *visitor);
 
@@ -211,6 +235,12 @@ public:
 
     virtual bool isEqualTo(const Name *other) const;
 
+    virtual const OperatorNameId *asOperatorNameId() const
+    { return this; }
+
+    virtual OperatorNameId *asOperatorNameId()
+    { return this; }
+
 protected:
     virtual void accept0(NameVisitor *visitor);
 
@@ -228,6 +258,12 @@ public:
 
     virtual bool isEqualTo(const Name *other) const;
 
+    virtual const ConversionNameId *asConversionNameId() const
+    { return this; }
+
+    virtual ConversionNameId *asConversionNameId()
+    { return this; }
+
 protected:
     virtual void accept0(NameVisitor *visitor);
 
-- 
GitLab