C++: Get rid of {Name,Type}::isEqualTo()

...since it's superseded by the class Matcher.

For consistency, rename FullySpecifiedType::isEqualTo() to match().

Change-Id: I07640f9218d814e0350265de45f05929e5d595a9
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
Nikolai Kosjar
2014-05-15 12:00:13 -04:00
parent 558f62ec71
commit acbc4b9f07
31 changed files with 103 additions and 514 deletions

View File

@@ -2691,12 +2691,12 @@ bool Bind::visit(SimpleSpecifierAST *ast)
switch (tokenKind(ast->specifier_token)) {
case T_IDENTIFIER: {
const Identifier *id = tokenAt(ast->specifier_token).identifier;
if (id->isEqualTo(control()->cpp11Override())) {
if (id->match(control()->cpp11Override())) {
if (_type.isOverride())
translationUnit()->error(ast->specifier_token, "duplicate `override'");
_type.setOverride(true);
}
else if (id->isEqualTo(control()->cpp11Final())) {
else if (id->match(control()->cpp11Final())) {
if (_type.isFinal())
translationUnit()->error(ast->specifier_token, "duplicate `final'");
_type.setFinal(true);

View File

@@ -26,14 +26,6 @@
using namespace CPlusPlus;
bool UndefinedType::isEqualTo(const Type *other) const
{
if (other->isUndefinedType())
return true;
return false;
}
void UndefinedType::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }
@@ -45,12 +37,6 @@ bool UndefinedType::match0(const Type *otherType, Matcher *matcher) const
return false;
}
bool VoidType::isEqualTo(const Type *other) const
{
const VoidType *o = other->asVoidType();
return o != 0;
}
void VoidType::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }
@@ -76,16 +62,6 @@ const Name *PointerToMemberType::memberName() const
FullySpecifiedType PointerToMemberType::elementType() const
{ return _elementType; }
bool PointerToMemberType::isEqualTo(const Type *other) const
{
const PointerToMemberType *o = other->asPointerToMemberType();
if (! o)
return false;
else if (! _memberName->isEqualTo(o->_memberName))
return false;
return _elementType.isEqualTo(o->_elementType);
}
void PointerToMemberType::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }
@@ -104,14 +80,6 @@ PointerType::PointerType(const FullySpecifiedType &elementType)
PointerType::~PointerType()
{ }
bool PointerType::isEqualTo(const Type *other) const
{
const PointerType *o = other->asPointerType();
if (! o)
return false;
return _elementType.isEqualTo(o->_elementType);
}
void PointerType::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }
@@ -133,16 +101,6 @@ ReferenceType::ReferenceType(const FullySpecifiedType &elementType, bool rvalueR
ReferenceType::~ReferenceType()
{ }
bool ReferenceType::isEqualTo(const Type *other) const
{
const ReferenceType *o = other->asReferenceType();
if (! o)
return false;
else if (isRvalueReference() != o->isRvalueReference())
return false;
return _elementType.isEqualTo(o->_elementType);
}
void ReferenceType::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }
@@ -167,14 +125,6 @@ IntegerType::IntegerType(int kind)
IntegerType::~IntegerType()
{ }
bool IntegerType::isEqualTo(const Type *other) const
{
const IntegerType *o = other->asIntegerType();
if (! o)
return false;
return _kind == o->_kind;
}
void IntegerType::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }
@@ -210,14 +160,6 @@ bool FloatType::match0(const Type *otherType, Matcher *matcher) const
int FloatType::kind() const
{ return _kind; }
bool FloatType::isEqualTo(const Type *other) const
{
const FloatType *o = other->asFloatType();
if (! o)
return false;
return _kind == o->_kind;
}
ArrayType::ArrayType(const FullySpecifiedType &elementType, unsigned size)
: _elementType(elementType), _size(size)
{ }
@@ -225,16 +167,6 @@ ArrayType::ArrayType(const FullySpecifiedType &elementType, unsigned size)
ArrayType::~ArrayType()
{ }
bool ArrayType::isEqualTo(const Type *other) const
{
const ArrayType *o = other->asArrayType();
if (! o)
return false;
else if (_size != o->_size)
return false;
return _elementType.isEqualTo(o->_elementType);
}
void ArrayType::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }
@@ -262,23 +194,6 @@ NamedType::~NamedType()
const Name *NamedType::name() const
{ return _name; }
bool NamedType::isEqualTo(const Type *other) const
{
const NamedType *o = other->asNamedType();
if (! o)
return false;
const Name *name = _name;
if (const QualifiedNameId *q = name->asQualifiedNameId())
name = q->name();
const Name *otherName = o->name();
if (const QualifiedNameId *q = otherName->asQualifiedNameId())
otherName = q->name();
return name->isEqualTo(otherName);
}
void NamedType::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }

View File

@@ -42,8 +42,6 @@ public:
virtual UndefinedType *asUndefinedType()
{ return this; }
virtual bool isEqualTo(const Type *other) const;
protected:
virtual void accept0(TypeVisitor *visitor);
virtual bool match0(const Type *otherType, Matcher *matcher) const;
@@ -52,8 +50,6 @@ protected:
class CPLUSPLUS_EXPORT VoidType: public Type
{
public:
virtual bool isEqualTo(const Type *other) const;
virtual const VoidType *asVoidType() const
{ return this; }
@@ -86,8 +82,6 @@ public:
int kind() const;
virtual bool isEqualTo(const Type *other) const;
virtual IntegerType *asIntegerType()
{ return this; }
@@ -117,8 +111,6 @@ public:
int kind() const;
virtual bool isEqualTo(const Type *other) const;
virtual const FloatType *asFloatType() const
{ return this; }
@@ -141,8 +133,6 @@ public:
FullySpecifiedType elementType() const;
virtual bool isEqualTo(const Type *other) const;
virtual const PointerType *asPointerType() const
{ return this; }
@@ -166,8 +156,6 @@ public:
const Name *memberName() const;
FullySpecifiedType elementType() const;
virtual bool isEqualTo(const Type *other) const;
virtual const PointerToMemberType *asPointerToMemberType() const
{ return this; }
@@ -192,8 +180,6 @@ public:
FullySpecifiedType elementType() const;
bool isRvalueReference() const;
virtual bool isEqualTo(const Type *other) const;
virtual const ReferenceType *asReferenceType() const
{ return this; }
@@ -218,8 +204,6 @@ public:
FullySpecifiedType elementType() const;
unsigned size() const;
virtual bool isEqualTo(const Type *other) const;
virtual const ArrayType *asArrayType() const
{ return this; }
@@ -243,8 +227,6 @@ public:
const Name *name() const;
virtual bool isEqualTo(const Type *other) const;
virtual const NamedType *asNamedType() const
{ return this; }

View File

@@ -172,18 +172,6 @@ bool FullySpecifiedType::isUnavailable() const
void FullySpecifiedType::setUnavailable(bool isUnavailable)
{ f._isUnavailable = isUnavailable; }
bool FullySpecifiedType::isEqualTo(const FullySpecifiedType &other) const
{
if (_flags != other._flags)
return false;
if (_type == other._type)
return true;
else if (! _type)
return false;
else
return _type->isEqualTo(other._type);
}
Type &FullySpecifiedType::operator*()
{ return *_type; }
@@ -250,5 +238,5 @@ bool FullySpecifiedType::match(const FullySpecifiedType &otherTy, Matcher *match
if (_flags != otherTy._flags)
return false;
return Type::match(type(), otherTy.type(), matcher);
return type()->match(otherTy.type(), matcher);
}

View File

@@ -94,8 +94,6 @@ public:
bool isUnavailable() const;
void setUnavailable(bool isUnavailable);
bool isEqualTo(const FullySpecifiedType &other) const;
Type &operator*();
const Type &operator*() const;
@@ -106,7 +104,7 @@ public:
bool operator != (const FullySpecifiedType &other) const;
bool operator < (const FullySpecifiedType &other) const;
bool match(const FullySpecifiedType &otherTy, Matcher *matcher) const;
bool match(const FullySpecifiedType &otherTy, Matcher *matcher = 0) const;
FullySpecifiedType simplified() const;
@@ -154,5 +152,4 @@ private:
} // namespace CPlusPlus
#endif // CPLUSPLUS_FULLYSPECIFIEDTYPE_H

View File

@@ -207,15 +207,3 @@ bool Identifier::match0(const Name *otherName, Matcher *matcher) const
return matcher->match(this, id);
return false;
}
bool Identifier::isEqualTo(const Name *other) const
{
if (this == other)
return true;
else if (other) {
if (const Identifier *nameId = other->asNameId())
return equalTo(nameId);
}
return false;
}

View File

@@ -106,8 +106,6 @@ public:
virtual const Identifier *identifier() const { return this; }
virtual bool isEqualTo(const Name *other) const;
virtual const Identifier *asNameId() const
{ return this; }

View File

@@ -106,7 +106,7 @@ bool Matcher::match(const PointerToMemberType *type, const PointerToMemberType *
if (type == otherType)
return true;
else if (! Name::match(type->memberName(), otherType->memberName(), this))
else if (! Matcher::match(type->memberName(), otherType->memberName(), this))
return false;
else if (! type->elementType().match(otherType->elementType(), this))
@@ -159,7 +159,7 @@ bool Matcher::match(const NamedType *type, const NamedType *otherType)
if (type == otherType)
return true;
else if (! Name::match(type->name(), otherType->name(), this))
else if (! Matcher::match(type->name(), otherType->name(), this))
return false;
return true;
@@ -184,7 +184,7 @@ bool Matcher::match(const Enum *type, const Enum *otherType)
if (type == otherType)
return true;
else if (! Name::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
else if (! Matcher::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
return false;
return true;
@@ -195,7 +195,7 @@ bool Matcher::match(const Namespace *type, const Namespace *otherType)
if (type == otherType)
return true;
else if (! Name::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
else if (! Matcher::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
return false;
return true;
@@ -214,7 +214,7 @@ bool Matcher::match(const ForwardClassDeclaration *type, const ForwardClassDecla
if (type == otherType)
return true;
else if (! Name::match(type->name(), otherType->name(), this))
else if (! Matcher::match(type->name(), otherType->name(), this))
return false;
return true;
@@ -225,7 +225,7 @@ bool Matcher::match(const Class *type, const Class *otherType)
if (type == otherType)
return true;
else if (! Name::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
else if (! Matcher::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
return false;
return true;
@@ -236,7 +236,7 @@ bool Matcher::match(const ObjCClass *type, const ObjCClass *otherType)
if (type == otherType)
return true;
else if (! Name::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
else if (! Matcher::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
return false;
return true;
@@ -247,7 +247,7 @@ bool Matcher::match(const ObjCProtocol *type, const ObjCProtocol *otherType)
if (type == otherType)
return true;
else if (! Name::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
else if (! Matcher::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
return false;
return true;
@@ -258,7 +258,7 @@ bool Matcher::match(const ObjCForwardClassDeclaration *type, const ObjCForwardCl
if (type == otherType)
return true;
else if (! Name::match(type->name(), otherType->name(), this))
else if (! Matcher::match(type->name(), otherType->name(), this))
return false;
return true;
@@ -269,7 +269,7 @@ bool Matcher::match(const ObjCForwardProtocolDeclaration *type, const ObjCForwar
if (type == otherType)
return true;
else if (! Name::match(type->name(), otherType->name(), this))
else if (! Matcher::match(type->name(), otherType->name(), this))
return false;
return true;
@@ -280,7 +280,7 @@ bool Matcher::match(const ObjCMethod *type, const ObjCMethod *otherType)
if (type == otherType)
return true;
else if (! Name::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
else if (! Matcher::match(type->unqualifiedName(), otherType->unqualifiedName(), this))
return false;
else if (type->argumentCount() != otherType->argumentCount())
@@ -330,7 +330,7 @@ bool Matcher::match(const TemplateNameId *name, const TemplateNameId *otherName)
bool Matcher::match(const DestructorNameId *name, const DestructorNameId *otherName)
{
return Name::match(name->name(), otherName->name(), this);
return Matcher::match(name->name(), otherName->name(), this);
}
bool Matcher::match(const OperatorNameId *name, const OperatorNameId *otherName)
@@ -345,8 +345,8 @@ bool Matcher::match(const ConversionNameId *name, const ConversionNameId *otherN
bool Matcher::match(const QualifiedNameId *name, const QualifiedNameId *otherName)
{
if (Name::match(name->base(), otherName->base(), this))
return Name::match(name->name(), otherName->name(), this);
if (Matcher::match(name->base(), otherName->base(), this))
return Matcher::match(name->name(), otherName->name(), this);
return false;
}
@@ -356,7 +356,7 @@ bool Matcher::match(const SelectorNameId *name, const SelectorNameId *otherName)
if (name->hasArguments() != otherName->hasArguments() || nc != otherName->nameCount())
return false;
for (unsigned i = 0; i < nc; ++i)
if (!Name::match(name->nameAt(i), otherName->nameAt(i), this))
if (! Matcher::match(name->nameAt(i), otherName->nameAt(i), this))
return false;
return true;
}

View File

@@ -58,11 +58,6 @@ bool Name::isQualifiedNameId() const
bool Name::isSelectorNameId() const
{ return asSelectorNameId() != 0; }
bool Name::match(const Name *name, const Name *otherName, Matcher *matcher)
{
return Matcher::match(name, otherName, matcher);
}
void Name::accept(NameVisitor *visitor) const
{
if (visitor->preVisit(this))
@@ -77,6 +72,11 @@ void Name::accept(const Name *name, NameVisitor *visitor)
name->accept(visitor);
}
bool Name::match(const Name *other, Matcher *matcher) const
{
return Matcher::match(this, other, matcher);
}
bool Name::Compare::operator()(const Name *name, const Name *other) const
{
if (name == 0)

View File

@@ -22,6 +22,7 @@
#define CPLUSPLUS_NAME_H
#include "CPlusPlusForwardDeclarations.h"
#include "Matcher.h"
#include <functional>
@@ -53,13 +54,11 @@ public:
virtual const QualifiedNameId *asQualifiedNameId() const { return 0; }
virtual const SelectorNameId *asSelectorNameId() const { return 0; }
virtual bool isEqualTo(const Name *other) const = 0; // TODO: remove me
static bool match(const Name *name, const Name *otherName, Matcher *matcher);
void accept(NameVisitor *visitor) const;
static void accept(const Name *name, NameVisitor *visitor);
bool match(const Name *other, Matcher *matcher = 0) const;
public:
struct Compare: std::binary_function<const Name *, const Name *, bool> {
bool operator()(const Name *name, const Name *other) const;

View File

@@ -54,21 +54,6 @@ const Name *QualifiedNameId::base() const
const Name *QualifiedNameId::name() const
{ return _name; }
bool QualifiedNameId::isEqualTo(const Name *other) const
{
if (other) {
if (const QualifiedNameId *q = other->asQualifiedNameId()) {
if (_base == q->_base || (_base && _base->isEqualTo(q->_base))) {
if (_name == q->_name || (_name && _name->isEqualTo(q->_name))) {
return true;
}
}
}
}
return false;
}
DestructorNameId::DestructorNameId(const Name *name)
: _name(name)
{ }
@@ -92,19 +77,6 @@ const Name *DestructorNameId::name() const
const Identifier *DestructorNameId::identifier() const
{ return _name->identifier(); }
bool DestructorNameId::isEqualTo(const Name *other) const
{
if (other) {
const DestructorNameId *d = other->asDestructorNameId();
if (! d)
return false;
const Name *l = name();
const Name *r = d->name();
return l->isEqualTo(r);
}
return false;
}
TemplateNameId::~TemplateNameId()
{ }
@@ -127,28 +99,6 @@ unsigned TemplateNameId::templateArgumentCount() const
const FullySpecifiedType &TemplateNameId::templateArgumentAt(unsigned index) const
{ return _templateArguments[index]; }
bool TemplateNameId::isEqualTo(const Name *other) const
{
if (other) {
const TemplateNameId *t = other->asTemplateNameId();
if (! t)
return false;
const Identifier *l = identifier();
const Identifier *r = t->identifier();
if (! l->isEqualTo(r))
return false;
if (templateArgumentCount() != t->templateArgumentCount())
return false;
for (unsigned i = 0, ei = templateArgumentCount(); i != ei; ++i) {
const FullySpecifiedType &l = _templateArguments[i];
const FullySpecifiedType &r = t->_templateArguments[i];
if (! l.isEqualTo(r))
return false;
}
}
return true;
}
bool TemplateNameId::Compare::operator()(const TemplateNameId *name,
const TemplateNameId *other) const
{
@@ -206,17 +156,6 @@ OperatorNameId::Kind OperatorNameId::kind() const
const Identifier *OperatorNameId::identifier() const
{ return 0; }
bool OperatorNameId::isEqualTo(const Name *other) const
{
if (other) {
const OperatorNameId *o = other->asOperatorNameId();
if (! o)
return false;
return _kind == o->kind();
}
return false;
}
ConversionNameId::ConversionNameId(const FullySpecifiedType &type)
: _type(type)
{ }
@@ -240,17 +179,6 @@ FullySpecifiedType ConversionNameId::type() const
const Identifier *ConversionNameId::identifier() const
{ return 0; }
bool ConversionNameId::isEqualTo(const Name *other) const
{
if (other) {
const ConversionNameId *c = other->asConversionNameId();
if (! c)
return false;
return _type.isEqualTo(c->type());
}
return false;
}
SelectorNameId::~SelectorNameId()
{ }
@@ -281,29 +209,6 @@ const Name *SelectorNameId::nameAt(unsigned index) const
bool SelectorNameId::hasArguments() const
{ return _hasArguments; }
bool SelectorNameId::isEqualTo(const Name *other) const
{
if (other) {
const SelectorNameId *q = other->asSelectorNameId();
if (! q)
return false;
else if (hasArguments() != q->hasArguments())
return false;
else {
const unsigned count = nameCount();
if (count != q->nameCount())
return false;
for (unsigned i = 0; i < count; ++i) {
const Name *l = nameAt(i);
const Name *r = q->nameAt(i);
if (! l->isEqualTo(r))
return false;
}
}
}
return true;
}
AnonymousNameId::AnonymousNameId(unsigned classTokenIndex)
: _classTokenIndex(classTokenIndex)
{ }
@@ -328,12 +233,3 @@ bool AnonymousNameId::match0(const Name *otherName, Matcher *matcher) const
const Identifier *AnonymousNameId::identifier() const
{ return 0; }
bool AnonymousNameId::isEqualTo(const Name *other) const
{
if (other) {
const AnonymousNameId *c = other->asAnonymousNameId();
return (c && this->_classTokenIndex == c->_classTokenIndex);
}
return false;
}

View File

@@ -41,8 +41,6 @@ public:
const Name *base() const;
const Name *name() const;
virtual bool isEqualTo(const Name *other) const;
virtual const QualifiedNameId *asQualifiedNameId() const
{ return this; }
@@ -65,8 +63,6 @@ public:
virtual const Identifier *identifier() const;
virtual bool isEqualTo(const Name *other) const;
virtual const DestructorNameId *asDestructorNameId() const
{ return this; }
@@ -96,8 +92,6 @@ public:
unsigned templateArgumentCount() const;
const FullySpecifiedType &templateArgumentAt(unsigned index) const;
virtual bool isEqualTo(const Name *other) const;
virtual const TemplateNameId *asTemplateNameId() const
{ return this; }
@@ -190,7 +184,6 @@ public:
Kind kind() const;
virtual const Identifier *identifier() const;
virtual bool isEqualTo(const Name *other) const;
virtual const OperatorNameId *asOperatorNameId() const
{ return this; }
@@ -212,7 +205,6 @@ public:
FullySpecifiedType type() const;
virtual const Identifier *identifier() const;
virtual bool isEqualTo(const Name *other) const;
virtual const ConversionNameId *asConversionNameId() const
{ return this; }
@@ -240,8 +232,6 @@ public:
const Name *nameAt(unsigned index) const;
bool hasArguments() const;
virtual bool isEqualTo(const Name *other) const;
virtual const SelectorNameId *asSelectorNameId() const
{ return this; }
@@ -268,7 +258,6 @@ public:
unsigned classTokenIndex() const;
virtual const Identifier *identifier() const;
virtual bool isEqualTo(const Name *other) const;
virtual const AnonymousNameId *asAnonymousNameId() const
{ return this; }

View File

@@ -144,18 +144,18 @@ Symbol *SymbolTable::lookat(const Identifier *id) const
if (! identity) {
continue;
} else if (const Identifier *nameId = identity->asNameId()) {
if (nameId->identifier()->isEqualTo(id))
if (nameId->identifier()->match(id))
break;
} else if (const TemplateNameId *t = identity->asTemplateNameId()) {
if (t->identifier()->isEqualTo(id))
if (t->identifier()->match(id))
break;
} else if (const DestructorNameId *d = identity->asDestructorNameId()) {
if (d->identifier()->isEqualTo(id))
if (d->identifier()->match(id))
break;
} else if (identity->isQualifiedNameId()) {
return 0;
} else if (const SelectorNameId *selectorNameId = identity->asSelectorNameId()) {
if (selectorNameId->identifier()->isEqualTo(id))
if (selectorNameId->identifier()->match(id))
break;
}
}

View File

@@ -245,14 +245,6 @@ bool Function::isSignatureEqualTo(const Function *other, Matcher *matcher) const
return true;
}
bool Function::isEqualTo(const Type *other) const
{
const Function *o = other->asFunctionType();
if (!isSignatureEqualTo(o))
return false;
return _returnType.isEqualTo(o->_returnType);
}
void Function::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }
@@ -457,20 +449,6 @@ Enum::~Enum()
FullySpecifiedType Enum::type() const
{ return FullySpecifiedType(const_cast<Enum *>(this)); }
bool Enum::isEqualTo(const Type *other) const
{
const Enum *o = other->asEnumType();
if (! o)
return false;
const Name *l = unqualifiedName();
const Name *r = o->unqualifiedName();
if (l == r)
return true;
else if (! l)
return false;
return l->isEqualTo(r);
}
bool Enum::isScoped() const
{
return _isScoped;
@@ -540,9 +518,6 @@ Symbol *Template::declaration() const
FullySpecifiedType Template::type() const
{ return FullySpecifiedType(const_cast<Template *>(this)); }
bool Template::isEqualTo(const Type *other) const
{ return other == this; }
void Template::visitSymbol0(SymbolVisitor *visitor)
{
if (visitor->visit(this)) {
@@ -575,18 +550,6 @@ Namespace::Namespace(Clone *clone, Subst *subst, Namespace *original)
Namespace::~Namespace()
{ }
bool Namespace::isEqualTo(const Type *other) const
{
const Namespace *o = other->asNamespaceType();
if (! o)
return false;
const Name *l = unqualifiedName();
const Name *r = o->unqualifiedName();
if (l == r || (l && l->isEqualTo(r)))
return true;
return false;
}
void Namespace::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }
@@ -654,19 +617,6 @@ ForwardClassDeclaration::~ForwardClassDeclaration()
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); }
@@ -735,19 +685,6 @@ void Class::addBaseClass(BaseClass *baseClass)
FullySpecifiedType Class::type() const
{ return FullySpecifiedType(const_cast<Class *>(this)); }
bool Class::isEqualTo(const Type *other) const
{
const Class *o = other->asClassType();
if (! o)
return false;
const Name *l = unqualifiedName();
const Name *r = o->unqualifiedName();
if (l == r || (l && l->isEqualTo(r)))
return true;
else
return false;
}
void Class::visitSymbol0(SymbolVisitor *visitor)
{
if (visitor->visit(this)) {
@@ -898,20 +835,6 @@ void ObjCClass::addProtocol(ObjCBaseProtocol *protocol)
FullySpecifiedType ObjCClass::type() const
{ return FullySpecifiedType(const_cast<ObjCClass *>(this)); }
bool ObjCClass::isEqualTo(const Type *other) const
{
const ObjCClass *o = other->asObjCClassType();
if (!o)
return false;
const Name *l = unqualifiedName();
const Name *r = o->unqualifiedName();
if (l == r || (l && l->isEqualTo(r)))
return true;
else
return false;
}
void ObjCClass::visitSymbol0(SymbolVisitor *visitor)
{
if (visitor->visit(this)) {
@@ -964,20 +887,6 @@ void ObjCProtocol::addProtocol(ObjCBaseProtocol *protocol)
FullySpecifiedType ObjCProtocol::type() const
{ return FullySpecifiedType(const_cast<ObjCProtocol *>(this)); }
bool ObjCProtocol::isEqualTo(const Type *other) const
{
const ObjCProtocol *o = other->asObjCProtocolType();
if (!o)
return false;
const Name *l = unqualifiedName();
const Name *r = o->unqualifiedName();
if (l == r || (l && l->isEqualTo(r)))
return true;
else
return false;
}
void ObjCProtocol::visitSymbol0(SymbolVisitor *visitor)
{
if (visitor->visit(this)) {
@@ -1013,20 +922,6 @@ ObjCForwardClassDeclaration::~ObjCForwardClassDeclaration()
FullySpecifiedType ObjCForwardClassDeclaration::type() const
{ return FullySpecifiedType(); }
bool ObjCForwardClassDeclaration::isEqualTo(const Type *other) const
{
if (const ObjCForwardClassDeclaration *otherFwdClass = other->asObjCForwardClassDeclarationType()) {
if (name() == otherFwdClass->name())
return true;
else if (name() && otherFwdClass->name())
return name()->isEqualTo(otherFwdClass->name());
else
return false;
}
return false;
}
void ObjCForwardClassDeclaration::visitSymbol0(SymbolVisitor *visitor)
{ visitor->visit(this); }
@@ -1057,20 +952,6 @@ ObjCForwardProtocolDeclaration::~ObjCForwardProtocolDeclaration()
FullySpecifiedType ObjCForwardProtocolDeclaration::type() const
{ return FullySpecifiedType(); }
bool ObjCForwardProtocolDeclaration::isEqualTo(const Type *other) const
{
if (const ObjCForwardProtocolDeclaration *otherFwdProtocol = other->asObjCForwardProtocolDeclarationType()) {
if (name() == otherFwdProtocol->name())
return true;
else if (name() && otherFwdProtocol->name())
return name()->isEqualTo(otherFwdProtocol->name());
else
return false;
}
return false;
}
void ObjCForwardProtocolDeclaration::visitSymbol0(SymbolVisitor *visitor)
{ visitor->visit(this); }
@@ -1099,30 +980,6 @@ ObjCMethod::ObjCMethod(Clone *clone, Subst *subst, ObjCMethod *original)
ObjCMethod::~ObjCMethod()
{ }
bool ObjCMethod::isEqualTo(const Type *other) const
{
const ObjCMethod *o = other->asObjCMethodType();
if (! o)
return false;
const Name *l = unqualifiedName();
const Name *r = o->unqualifiedName();
if (l == r || (l && l->isEqualTo(r))) {
if (argumentCount() != o->argumentCount())
return false;
else if (! _returnType.isEqualTo(o->_returnType))
return false;
for (unsigned i = 0; i < argumentCount(); ++i) {
Symbol *l = argumentAt(i);
Symbol *r = o->argumentAt(i);
if (! l->type().isEqualTo(r->type()))
return false;
}
return true;
}
return false;
}
void ObjCMethod::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }

View File

@@ -232,16 +232,16 @@ public:
ForwardClassDeclaration(Clone *clone, Subst *subst, ForwardClassDeclaration *original);
virtual ~ForwardClassDeclaration();
// Symbol's interface
virtual FullySpecifiedType type() const;
virtual bool isEqualTo(const Type *other) const;
virtual const ForwardClassDeclaration *asForwardClassDeclaration() const
{ return this; }
virtual ForwardClassDeclaration *asForwardClassDeclaration()
{ return this; }
// Type's interface
virtual const ForwardClassDeclaration *asForwardClassDeclarationType() const
{ return this; }
@@ -261,27 +261,25 @@ public:
Enum(Clone *clone, Subst *subst, Enum *original);
virtual ~Enum();
bool isScoped() const;
void setScoped(bool scoped);
// Symbol's interface
virtual FullySpecifiedType type() const;
// Type's interface
virtual bool isEqualTo(const Type *other) const;
virtual const Enum *asEnum() const
{ return this; }
virtual Enum *asEnum()
{ return this; }
// Type's interface
virtual const Enum *asEnumType() const
{ return this; }
virtual Enum *asEnumType()
{ return this; }
bool isScoped() const;
void setScoped(bool scoped);
protected:
virtual void visitSymbol0(SymbolVisitor *visitor);
virtual void accept0(TypeVisitor *visitor);
@@ -349,29 +347,27 @@ public:
bool isSignatureEqualTo(const Function *other, Matcher *matcher = 0) const;
bool isAmbiguous() const; // internal
void setAmbiguous(bool isAmbiguous); // internal
bool maybeValidPrototype(unsigned actualArgumentCount) const;
// Symbol's interface
virtual FullySpecifiedType type() const;
// Type's interface
virtual bool isEqualTo(const Type *other) const;
virtual const Function *asFunction() const
{ return this; }
virtual Function *asFunction()
{ return this; }
// Type's interface
virtual const Function *asFunctionType() const
{ return this; }
virtual Function *asFunctionType()
{ return this; }
bool isAmbiguous() const; // internal
void setAmbiguous(bool isAmbiguous); // internal
bool maybeValidPrototype(unsigned actualArgumentCount) const;
protected:
virtual void visitSymbol0(SymbolVisitor *visitor);
virtual void accept0(TypeVisitor *visitor);
@@ -410,15 +406,13 @@ public:
// Symbol's interface
virtual FullySpecifiedType type() const;
// Type's interface
virtual bool isEqualTo(const Type *other) const;
virtual const Template *asTemplate() const
{ return this; }
virtual Template *asTemplate()
{ return this; }
// Type's interface
virtual const Template *asTemplateType() const
{ return this; }
@@ -442,15 +436,13 @@ public:
// Symbol's interface
virtual FullySpecifiedType type() const;
// Type's interface
virtual bool isEqualTo(const Type *other) const;
virtual const Namespace *asNamespace() const
{ return this; }
virtual Namespace *asNamespace()
{ return this; }
// Type's interface
virtual const Namespace *asNamespaceType() const
{ return this; }
@@ -526,15 +518,13 @@ public:
// Symbol's interface
virtual FullySpecifiedType type() const;
// Type's interface
virtual bool isEqualTo(const Type *other) const;
virtual const Class *asClass() const
{ return this; }
virtual Class *asClass()
{ return this; }
// Type's interface
virtual const Class *asClassType() const
{ return this; }
@@ -667,16 +657,16 @@ public:
ObjCForwardProtocolDeclaration(Clone *clone, Subst *subst, ObjCForwardProtocolDeclaration *original);
virtual ~ObjCForwardProtocolDeclaration();
// Symbol's interface
virtual FullySpecifiedType type() const;
virtual bool isEqualTo(const Type *other) const;
virtual const ObjCForwardProtocolDeclaration *asObjCForwardProtocolDeclaration() const
{ return this; }
virtual ObjCForwardProtocolDeclaration *asObjCForwardProtocolDeclaration()
{ return this; }
// Type's interface
virtual const ObjCForwardProtocolDeclaration *asObjCForwardProtocolDeclarationType() const
{ return this; }
@@ -703,15 +693,13 @@ public:
// Symbol's interface
virtual FullySpecifiedType type() const;
// Type's interface
virtual bool isEqualTo(const Type *other) const;
virtual const ObjCProtocol *asObjCProtocol() const
{ return this; }
virtual ObjCProtocol *asObjCProtocol()
{ return this; }
// Type's interface
virtual const ObjCProtocol *asObjCProtocolType() const
{ return this; }
@@ -734,16 +722,16 @@ public:
ObjCForwardClassDeclaration(Clone *clone, Subst *subst, ObjCForwardClassDeclaration *original);
virtual ~ObjCForwardClassDeclaration();
// Symbol's interface
virtual FullySpecifiedType type() const;
virtual bool isEqualTo(const Type *other) const;
virtual const ObjCForwardClassDeclaration *asObjCForwardClassDeclaration() const
{ return this; }
virtual ObjCForwardClassDeclaration *asObjCForwardClassDeclaration()
{ return this; }
// Type's interface
virtual const ObjCForwardClassDeclaration *asObjCForwardClassDeclarationType() const
{ return this; }
@@ -780,15 +768,13 @@ public:
// Symbol's interface
virtual FullySpecifiedType type() const;
// Type's interface
virtual bool isEqualTo(const Type *other) const;
virtual const ObjCClass *asObjCClass() const
{ return this; }
virtual ObjCClass *asObjCClass()
{ return this; }
// Type's interface
virtual const ObjCClass *asObjCClassType() const
{ return this; }
@@ -832,15 +818,13 @@ public:
// Symbol's interface
virtual FullySpecifiedType type() const;
// Type's interface
virtual bool isEqualTo(const Type *other) const;
virtual const ObjCMethod *asObjCMethod() const
{ return this; }
virtual ObjCMethod *asObjCMethod()
{ return this; }
// Type's interface
virtual const ObjCMethod *asObjCMethodType() const
{ return this; }

View File

@@ -107,7 +107,7 @@ void Type::accept(Type *type, TypeVisitor *visitor)
type->accept(visitor);
}
bool Type::match(const Type *type, const Type *otherType, Matcher *matcher)
bool Type::match(const Type *other, Matcher *matcher) const
{
return Matcher::match(type, otherType, matcher);
return Matcher::match(this, other, matcher);
}

View File

@@ -97,10 +97,7 @@ public:
void accept(TypeVisitor *visitor);
static void accept(Type *type, TypeVisitor *visitor);
static bool match(const Type *type, const Type *otherType, Matcher *matcher);
virtual bool isEqualTo(const Type *other) const = 0; // ### remove
bool match(const Type *other, Matcher *matcher = 0) const;
protected:
virtual void accept0(TypeVisitor *visitor) = 0;
@@ -112,5 +109,4 @@ protected: // for Matcher
} // namespace CPlusPlus
#endif // CPLUSPLUS_TYPE_H