summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Symbols.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-02-16 15:43:24 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-02-16 18:20:46 +0100
commitba78e075da3919aafd2afdb8508952115f713c36 (patch)
treede94307448655b215342d82ec6f9fe5b728c4717 /src/shared/cplusplus/Symbols.cpp
parent2788d77229dbecdeae293f8e3edff70f39750e63 (diff)
downloadqt-creator-ba78e075da3919aafd2afdb8508952115f713c36.tar.gz
Introduced support for forward class declarations.
Diffstat (limited to 'src/shared/cplusplus/Symbols.cpp')
-rw-r--r--src/shared/cplusplus/Symbols.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/shared/cplusplus/Symbols.cpp b/src/shared/cplusplus/Symbols.cpp
index 6fae11453b..b8195c7db1 100644
--- a/src/shared/cplusplus/Symbols.cpp
+++ b/src/shared/cplusplus/Symbols.cpp
@@ -401,6 +401,53 @@ void BaseClass::setVirtual(bool isVirtual)
void BaseClass::visitSymbol0(SymbolVisitor *visitor)
{ visitor->visit(this); }
+ForwardClassDeclaration::ForwardClassDeclaration(TranslationUnit *translationUnit,
+ unsigned sourceLocation, Name *name)
+ : Symbol(translationUnit, sourceLocation, name),
+ _templateParameters(0)
+{ }
+
+ForwardClassDeclaration::~ForwardClassDeclaration()
+{ delete _templateParameters; }
+
+unsigned ForwardClassDeclaration::templateParameterCount() const
+{
+ if (! _templateParameters)
+ return 0;
+ return _templateParameters->symbolCount();
+}
+
+Symbol *ForwardClassDeclaration::templateParameterAt(unsigned index) const
+{ return _templateParameters->symbolAt(index); }
+
+Scope *ForwardClassDeclaration::templateParameters() const
+{ return _templateParameters; }
+
+void ForwardClassDeclaration::setTemplateParameters(Scope *templateParameters)
+{ _templateParameters = templateParameters; }
+
+FullySpecifiedType ForwardClassDeclaration::type() const
+{ return FullySpecifiedType(const_cast<ForwardClassDeclaration *>(this)); }
+
+bool ForwardClassDeclaration::isEqualTo(const Type *other) const
+{
+ if (const ForwardClassDeclaration *otherClassFwdTy = other->asForwardClassDeclarationType()) {
+ if (name() == otherClassFwdTy->name())
+ return true;
+ else if (name() && otherClassFwdTy->name())
+ return name()->isEqualTo(otherClassFwdTy->name());
+
+ return false;
+ }
+ return false;
+}
+
+void ForwardClassDeclaration::visitSymbol0(SymbolVisitor *visitor)
+{ visitor->visit(this); }
+
+void ForwardClassDeclaration::accept0(TypeVisitor *visitor)
+{ visitor->visit(this); }
+
Class::Class(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name)
: ScopedSymbol(translationUnit, sourceLocation, name),
_key(ClassKey),