Introduced support for forward class declarations.

This commit is contained in:
Roberto Raggi
2009-02-16 15:43:24 +01:00
parent 2788d77229
commit ba78e075da
13 changed files with 142 additions and 4 deletions

View File

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