summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Symbols.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus/Symbols.cpp')
-rw-r--r--src/shared/cplusplus/Symbols.cpp1119
1 files changed, 0 insertions, 1119 deletions
diff --git a/src/shared/cplusplus/Symbols.cpp b/src/shared/cplusplus/Symbols.cpp
deleted file mode 100644
index e6f20bbeaf..0000000000
--- a/src/shared/cplusplus/Symbols.cpp
+++ /dev/null
@@ -1,1119 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (info@qt.nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at info@qt.nokia.com.
-**
-**************************************************************************/
-// Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-#include "Symbols.h"
-#include "Names.h"
-#include "TypeVisitor.h"
-#include "SymbolVisitor.h"
-#include "TypeMatcher.h"
-#include "Scope.h"
-
-using namespace CPlusPlus;
-
-UsingNamespaceDirective::UsingNamespaceDirective(TranslationUnit *translationUnit,
- unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name)
-{ }
-
-UsingNamespaceDirective::~UsingNamespaceDirective()
-{ }
-
-FullySpecifiedType UsingNamespaceDirective::type() const
-{ return FullySpecifiedType(); }
-
-void UsingNamespaceDirective::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-NamespaceAlias::NamespaceAlias(TranslationUnit *translationUnit,
- unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name), _namespaceName(0)
-{ }
-
-NamespaceAlias::~NamespaceAlias()
-{ }
-
-const Name *NamespaceAlias::namespaceName() const
-{ return _namespaceName; }
-
-void NamespaceAlias::setNamespaceName(const Name *namespaceName)
-{ _namespaceName = namespaceName; }
-
-FullySpecifiedType NamespaceAlias::type() const
-{ return FullySpecifiedType(); }
-
-void NamespaceAlias::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-
-UsingDeclaration::UsingDeclaration(TranslationUnit *translationUnit,
- unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name)
-{ }
-
-UsingDeclaration::~UsingDeclaration()
-{ }
-
-FullySpecifiedType UsingDeclaration::type() const
-{ return FullySpecifiedType(); }
-
-void UsingDeclaration::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-Declaration::Declaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name)
-{ }
-
-Declaration::~Declaration()
-{ }
-
-void Declaration::setType(const FullySpecifiedType &type)
-{ _type = type; }
-
-FullySpecifiedType Declaration::type() const
-{ return _type; }
-
-void Declaration::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-EnumeratorDeclaration::EnumeratorDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Declaration(translationUnit, sourceLocation, name)
- , _constantValue(0)
-{}
-
-EnumeratorDeclaration::~EnumeratorDeclaration()
-{}
-
-const StringLiteral *EnumeratorDeclaration::constantValue() const
-{ return _constantValue; }
-
-void EnumeratorDeclaration::setConstantValue(const StringLiteral *constantValue)
-{ _constantValue = constantValue; }
-
-Argument::Argument(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name),
- _initializer(0)
-{ }
-
-Argument::~Argument()
-{ }
-
-bool Argument::hasInitializer() const
-{ return _initializer != 0; }
-
-const StringLiteral *Argument::initializer() const
-{ return _initializer; }
-
-void Argument::setInitializer(const StringLiteral *initializer)
-{ _initializer = initializer; }
-
-void Argument::setType(const FullySpecifiedType &type)
-{ _type = type; }
-
-FullySpecifiedType Argument::type() const
-{ return _type; }
-
-void Argument::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-TypenameArgument::TypenameArgument(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name)
-{ }
-
-TypenameArgument::~TypenameArgument()
-{ }
-
-void TypenameArgument::setType(const FullySpecifiedType &type)
-{ _type = type; }
-
-FullySpecifiedType TypenameArgument::type() const
-{ return _type; }
-
-void TypenameArgument::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-Function::Function(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Scope(translationUnit, sourceLocation, name),
- _flags(0)
-{ }
-
-Function::~Function()
-{ }
-
-bool Function::isNormal() const
-{ return f._methodKey == NormalMethod; }
-
-bool Function::isSignal() const
-{ return f._methodKey == SignalMethod; }
-
-bool Function::isSlot() const
-{ return f._methodKey == SlotMethod; }
-
-bool Function::isInvokable() const
-{ return f._methodKey == InvokableMethod; }
-
-int Function::methodKey() const
-{ return f._methodKey; }
-
-void Function::setMethodKey(int key)
-{ f._methodKey = key; }
-
-bool Function::isEqualTo(const Type *other) const
-{
- const Function *o = other->asFunctionType();
- if (! o)
- return false;
- else if (isConst() != o->isConst())
- return false;
- else if (isVolatile() != o->isVolatile())
- return false;
-#ifdef ICHECK_BUILD
- else if (isInvokable() != o->isInvokable())
- return false;
- else if (isSignal() != o->isSignal())
- return false;
-#endif
-
- 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;
-}
-
-#ifdef ICHECK_BUILD
-bool Function::isEqualTo(const Function* fct, bool ignoreName/* = false*/) const
-{
- if(!ignoreName)
- return isEqualTo((Type*)fct);
-
- if (! fct)
- return false;
- else if (isConst() != fct->isConst())
- return false;
- else if (isVolatile() != fct->isVolatile())
- return false;
- else if (isInvokable() != fct->isInvokable())
- return false;
- else if (isSignal() != fct->isSignal())
- return false;
-
- if (_arguments->symbolCount() != fct->_arguments->symbolCount())
- return false;
- else if (! _returnType.isEqualTo(fct->_returnType))
- return false;
- for (unsigned i = 0; i < _arguments->symbolCount(); ++i) {
- Symbol *l = _arguments->symbolAt(i);
- Symbol *r = fct->_arguments->symbolAt(i);
- if (! l->type().isEqualTo(r->type()))
- return false;
- }
- return true;
-}
-#endif
-
-void Function::accept0(TypeVisitor *visitor)
-{ visitor->visit(this); }
-
-bool Function::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const Function *otherTy = otherType->asFunctionType())
- return matcher->match(this, otherTy);
-
- return false;
-}
-
-FullySpecifiedType Function::type() const
-{
- FullySpecifiedType ty(const_cast<Function *>(this));
- ty.setConst(isConst());
- ty.setVolatile(isVolatile());
- return ty;
-}
-
-FullySpecifiedType Function::returnType() const
-{ return _returnType; }
-
-void Function::setReturnType(const FullySpecifiedType &returnType)
-{ _returnType = returnType; }
-
-bool Function::hasReturnType() const
-{
- const FullySpecifiedType ty = returnType();
- return ty.isValid() || ty.isSigned() || ty.isUnsigned();
-}
-
-unsigned Function::argumentCount() const
-{
- const unsigned c = memberCount();
- if (c > 0 && memberAt(0)->type()->isVoidType())
- return 0;
- if (c > 0 && memberAt(c - 1)->isBlock())
- return c - 1;
- return c;
-}
-
-Symbol *Function::argumentAt(unsigned index) const
-{ return memberAt(index); }
-
-bool Function::hasArguments() const
-{
- return ! (argumentCount() == 0 ||
- (argumentCount() == 1 && argumentAt(0)->type()->isVoidType()));
-}
-
-unsigned Function::minimumArgumentCount() const
-{
- unsigned index = 0;
-
- for (; index < argumentCount(); ++index) {
- if (Argument *arg = argumentAt(index)->asArgument()) {
- if (arg->hasInitializer())
- break;
- }
- }
-
- return index;
-}
-
-bool Function::isVirtual() const
-{ return f._isVirtual; }
-
-void Function::setVirtual(bool isVirtual)
-{ f._isVirtual = isVirtual; }
-
-bool Function::isVariadic() const
-{ return f._isVariadic; }
-
-void Function::setVariadic(bool isVariadic)
-{ f._isVariadic = isVariadic; }
-
-bool Function::isConst() const
-{ return f._isConst; }
-
-void Function::setConst(bool isConst)
-{ f._isConst = isConst; }
-
-bool Function::isVolatile() const
-{ return f._isVolatile; }
-
-void Function::setVolatile(bool isVolatile)
-{ f._isVolatile = isVolatile; }
-
-bool Function::isPureVirtual() const
-{ return f._isPureVirtual; }
-
-void Function::setPureVirtual(bool isPureVirtual)
-{ f._isPureVirtual = isPureVirtual; }
-
-bool Function::isAmbiguous() const
-{ return f._isAmbiguous; }
-
-void Function::setAmbiguous(bool isAmbiguous)
-{ f._isAmbiguous = isAmbiguous; }
-
-void Function::visitSymbol0(SymbolVisitor *visitor)
-{
- if (visitor->visit(this)) {
- for (unsigned i = 0; i < memberCount(); ++i) {
- visitSymbol(memberAt(i), visitor);
- }
- }
-}
-
-bool Function::maybeValidPrototype(unsigned actualArgumentCount) const
-{
- unsigned minNumberArguments = 0;
-
- for (; minNumberArguments < this->argumentCount(); ++minNumberArguments) {
- Argument *arg = this->argumentAt(minNumberArguments)->asArgument();
-
- if (arg->hasInitializer())
- break;
- }
-
- if (actualArgumentCount < minNumberArguments) {
- // not enough arguments.
- return false;
-
- } else if (! this->isVariadic() && actualArgumentCount > this->argumentCount()) {
- // too many arguments.
- return false;
- }
-
- return true;
-}
-
-
-Block::Block(TranslationUnit *translationUnit, unsigned sourceLocation)
- : Scope(translationUnit, sourceLocation, /*name = */ 0)
-{ }
-
-Block::~Block()
-{ }
-
-FullySpecifiedType Block::type() const
-{ return FullySpecifiedType(); }
-
-void Block::visitSymbol0(SymbolVisitor *visitor)
-{
- if (visitor->visit(this)) {
- for (unsigned i = 0; i < memberCount(); ++i) {
- visitSymbol(memberAt(i), visitor);
- }
- }
-}
-
-Enum::Enum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Scope(translationUnit, sourceLocation, name)
-{ }
-
-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);
-}
-
-void Enum::accept0(TypeVisitor *visitor)
-{ visitor->visit(this); }
-
-bool Enum::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const Enum *otherTy = otherType->asEnumType())
- return matcher->match(this, otherTy);
-
- return false;
-}
-
-void Enum::visitSymbol0(SymbolVisitor *visitor)
-{
- if (visitor->visit(this)) {
- for (unsigned i = 0; i < memberCount(); ++i) {
- visitSymbol(memberAt(i), visitor);
- }
- }
-}
-
-Template::Template(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Scope(translationUnit, sourceLocation, name)
-{ }
-
-Template::~Template()
-{ }
-
-unsigned Template::templateParameterCount() const
-{
- if (declaration() != 0)
- return memberCount() - 1;
-
- return 0;
-}
-
-Symbol *Template::templateParameterAt(unsigned index) const
-{ return memberAt(index); }
-
-Symbol *Template::declaration() const
-{
- if (isEmpty())
- return 0;
-
- if (Symbol *s = memberAt(memberCount() - 1)) {
- if (s->isClass() || s->isForwardClassDeclaration() ||
- s->isTemplate() || s->isFunction() || s->isDeclaration())
- return s;
- }
-
- return 0;
-}
-
-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)) {
- for (unsigned i = 0; i < memberCount(); ++i) {
- visitSymbol(memberAt(i), visitor);
- }
- }
-}
-
-void Template::accept0(TypeVisitor *visitor)
-{ visitor->visit(this); }
-
-bool Template::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const Template *otherTy = otherType->asTemplateType())
- return matcher->match(this, otherTy);
- return false;
-}
-
-Namespace::Namespace(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Scope(translationUnit, sourceLocation, name)
-{ }
-
-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); }
-
-bool Namespace::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const Namespace *otherTy = otherType->asNamespaceType())
- return matcher->match(this, otherTy);
-
- return false;
-}
-
-void Namespace::visitSymbol0(SymbolVisitor *visitor)
-{
- if (visitor->visit(this)) {
- for (unsigned i = 0; i < memberCount(); ++i) {
- visitSymbol(memberAt(i), visitor);
- }
- }
-}
-
-FullySpecifiedType Namespace::type() const
-{ return FullySpecifiedType(const_cast<Namespace *>(this)); }
-
-BaseClass::BaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name),
- _isVirtual(false)
-{ }
-
-BaseClass::~BaseClass()
-{ }
-
-FullySpecifiedType BaseClass::type() const
-{ return _type; }
-
-void BaseClass::setType(const FullySpecifiedType &type)
-{ _type = type; }
-
-bool BaseClass::isVirtual() const
-{ return _isVirtual; }
-
-void BaseClass::setVirtual(bool isVirtual)
-{ _isVirtual = isVirtual; }
-
-void BaseClass::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-ForwardClassDeclaration::ForwardClassDeclaration(TranslationUnit *translationUnit,
- unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name)
-{ }
-
-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); }
-
-void ForwardClassDeclaration::accept0(TypeVisitor *visitor)
-{ visitor->visit(this); }
-
-bool ForwardClassDeclaration::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const ForwardClassDeclaration *otherTy = otherType->asForwardClassDeclarationType())
- return matcher->match(this, otherTy);
-
- return false;
-}
-
-Class::Class(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Scope(translationUnit, sourceLocation, name),
- _key(ClassKey)
-{ }
-
-Class::~Class()
-{ }
-
-bool Class::isClass() const
-{ return _key == ClassKey; }
-
-bool Class::isStruct() const
-{ return _key == StructKey; }
-
-bool Class::isUnion() const
-{ return _key == UnionKey; }
-
-Class::Key Class::classKey() const
-{ return _key; }
-
-void Class::setClassKey(Key key)
-{ _key = key; }
-
-void Class::accept0(TypeVisitor *visitor)
-{ visitor->visit(this); }
-
-bool Class::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const Class *otherTy = otherType->asClassType())
- return matcher->match(this, otherTy);
-
- return false;
-}
-
-unsigned Class::baseClassCount() const
-{ return _baseClasses.size(); }
-
-BaseClass *Class::baseClassAt(unsigned index) const
-{ return _baseClasses.at(index); }
-
-void Class::addBaseClass(BaseClass *baseClass)
-{ _baseClasses.push_back(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)) {
- for (unsigned i = 0; i < _baseClasses.size(); ++i) {
- visitSymbol(_baseClasses.at(i), visitor);
- }
- for (unsigned i = 0; i < memberCount(); ++i) {
- visitSymbol(memberAt(i), visitor);
- }
- }
-}
-
-
-QtPropertyDeclaration::QtPropertyDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name)
- , _flags(NoFlags)
-{ }
-
-QtPropertyDeclaration::~QtPropertyDeclaration()
-{ }
-
-void QtPropertyDeclaration::setType(const FullySpecifiedType &type)
-{ _type = type; }
-
-void QtPropertyDeclaration::setFlags(int flags)
-{ _flags = flags; }
-
-int QtPropertyDeclaration::flags() const
-{ return _flags; }
-
-FullySpecifiedType QtPropertyDeclaration::type() const
-{ return _type; }
-
-void QtPropertyDeclaration::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-
-QtEnum::QtEnum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name)
-{ }
-
-QtEnum::~QtEnum()
-{ }
-
-FullySpecifiedType QtEnum::type() const
-{ return FullySpecifiedType(); }
-
-void QtEnum::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-
-ObjCBaseClass::ObjCBaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name)
-{ }
-
-ObjCBaseClass::~ObjCBaseClass()
-{ }
-
-FullySpecifiedType ObjCBaseClass::type() const
-{ return FullySpecifiedType(); }
-
-void ObjCBaseClass::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-ObjCBaseProtocol::ObjCBaseProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Symbol(translationUnit, sourceLocation, name)
-{ }
-
-ObjCBaseProtocol::~ObjCBaseProtocol()
-{ }
-
-FullySpecifiedType ObjCBaseProtocol::type() const
-{ return FullySpecifiedType(); }
-
-void ObjCBaseProtocol::visitSymbol0(SymbolVisitor *visitor)
-{ visitor->visit(this); }
-
-ObjCClass::ObjCClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name):
- Scope(translationUnit, sourceLocation, name),
- _categoryName(0),
- _baseClass(0),
- _isInterface(false)
-{
-}
-
-ObjCClass::~ObjCClass()
-{}
-
-bool ObjCClass::isInterface() const
-{ return _isInterface; }
-
-void ObjCClass::setInterface(bool isInterface)
-{ _isInterface = isInterface; }
-
-bool ObjCClass::isCategory() const
-{ return _categoryName != 0; }
-
-const Name *ObjCClass::categoryName() const
-{ return _categoryName; }
-
-void ObjCClass::setCategoryName(const Name *categoryName)
-{ _categoryName = categoryName; }
-
-ObjCBaseClass *ObjCClass::baseClass() const
-{ return _baseClass; }
-
-void ObjCClass::setBaseClass(ObjCBaseClass *baseClass)
-{ _baseClass = baseClass; }
-
-unsigned ObjCClass::protocolCount() const
-{ return _protocols.size(); }
-
-ObjCBaseProtocol *ObjCClass::protocolAt(unsigned index) const
-{ return _protocols.at(index); }
-
-void ObjCClass::addProtocol(ObjCBaseProtocol *protocol)
-{ _protocols.push_back(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)) {
- if (_baseClass)
- visitSymbol(_baseClass, visitor);
-
- for (unsigned i = 0; i < _protocols.size(); ++i)
- visitSymbol(_protocols.at(i), visitor);
-
- for (unsigned i = 0; i < memberCount(); ++i)
- visitSymbol(memberAt(i), visitor);
- }
-}
-
-void ObjCClass::accept0(TypeVisitor *visitor)
-{ visitor->visit(this); }
-
-bool ObjCClass::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const ObjCClass *otherTy = otherType->asObjCClassType())
- return matcher->match(this, otherTy);
-
- return false;
-}
-
-ObjCProtocol::ObjCProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name):
- Scope(translationUnit, sourceLocation, name)
-{
-}
-
-ObjCProtocol::~ObjCProtocol()
-{}
-
-unsigned ObjCProtocol::protocolCount() const
-{ return _protocols.size(); }
-
-ObjCBaseProtocol *ObjCProtocol::protocolAt(unsigned index) const
-{ return _protocols.at(index); }
-
-void ObjCProtocol::addProtocol(ObjCBaseProtocol *protocol)
-{ _protocols.push_back(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)) {
- for (unsigned i = 0; i < _protocols.size(); ++i)
- visitSymbol(_protocols.at(i), visitor);
- }
-}
-
-void ObjCProtocol::accept0(TypeVisitor *visitor)
-{ visitor->visit(this); }
-
-bool ObjCProtocol::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const ObjCProtocol *otherTy = otherType->asObjCProtocolType())
- return matcher->match(this, otherTy);
-
- return false;
-}
-
-ObjCForwardClassDeclaration::ObjCForwardClassDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation,
- const Name *name):
- Symbol(translationUnit, sourceLocation, name)
-{
-}
-
-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); }
-
-void ObjCForwardClassDeclaration::accept0(TypeVisitor *visitor)
-{ visitor->visit(this); }
-
-bool ObjCForwardClassDeclaration::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const ObjCForwardClassDeclaration *otherTy = otherType->asObjCForwardClassDeclarationType())
- return matcher->match(this, otherTy);
-
- return false;
-}
-
-ObjCForwardProtocolDeclaration::ObjCForwardProtocolDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation,
- const Name *name):
- Symbol(translationUnit, sourceLocation, name)
-{
-}
-
-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); }
-
-void ObjCForwardProtocolDeclaration::accept0(TypeVisitor *visitor)
-{ visitor->visit(this); }
-
-bool ObjCForwardProtocolDeclaration::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const ObjCForwardProtocolDeclaration *otherTy = otherType->asObjCForwardProtocolDeclarationType())
- return matcher->match(this, otherTy);
-
- return false;
-}
-
-ObjCMethod::ObjCMethod(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : Scope(translationUnit, sourceLocation, name),
- _flags(0)
-{ }
-
-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); }
-
-bool ObjCMethod::matchType0(const Type *otherType, TypeMatcher *matcher) const
-{
- if (const ObjCMethod *otherTy = otherType->asObjCMethodType())
- return matcher->match(this, otherTy);
-
- return false;
-}
-
-FullySpecifiedType ObjCMethod::type() const
-{ return FullySpecifiedType(const_cast<ObjCMethod *>(this)); }
-
-FullySpecifiedType ObjCMethod::returnType() const
-{ return _returnType; }
-
-void ObjCMethod::setReturnType(const FullySpecifiedType &returnType)
-{ _returnType = returnType; }
-
-bool ObjCMethod::hasReturnType() const
-{
- const FullySpecifiedType ty = returnType();
- return ty.isValid() || ty.isSigned() || ty.isUnsigned();
-}
-
-unsigned ObjCMethod::argumentCount() const
-{
- const unsigned c = memberCount();
- if (c > 0 && memberAt(c - 1)->isBlock())
- return c - 1;
- return c;
-}
-
-Symbol *ObjCMethod::argumentAt(unsigned index) const
-{
- return memberAt(index);
-}
-
-bool ObjCMethod::hasArguments() const
-{
- return ! (argumentCount() == 0 ||
- (argumentCount() == 1 && argumentAt(0)->type()->isVoidType()));
-}
-
-bool ObjCMethod::isVariadic() const
-{ return f._isVariadic; }
-
-void ObjCMethod::setVariadic(bool isVariadic)
-{ f._isVariadic = isVariadic; }
-
-void ObjCMethod::visitSymbol0(SymbolVisitor *visitor)
-{
- if (visitor->visit(this)) {
- for (unsigned i = 0; i < memberCount(); ++i) {
- visitSymbol(memberAt(i), visitor);
- }
- }
-}
-
-ObjCPropertyDeclaration::ObjCPropertyDeclaration(TranslationUnit *translationUnit,
- unsigned sourceLocation,
- const Name *name):
- Symbol(translationUnit, sourceLocation, name),
- _getterName(0),
- _setterName(0),
- _propertyAttributes(None)
-{}
-
-ObjCPropertyDeclaration::~ObjCPropertyDeclaration()
-{}
-
-bool ObjCPropertyDeclaration::hasAttribute(int attribute) const
-{ return _propertyAttributes & attribute; }
-
-void ObjCPropertyDeclaration::setAttributes(int attributes)
-{ _propertyAttributes = attributes; }
-
-bool ObjCPropertyDeclaration::hasGetter() const
-{ return hasAttribute(Getter); }
-
-bool ObjCPropertyDeclaration::hasSetter() const
-{ return hasAttribute(Setter); }
-
-const Name *ObjCPropertyDeclaration::getterName() const
-{ return _getterName; }
-
-void ObjCPropertyDeclaration::setGetterName(const Name *getterName)
-{ _getterName = getterName; }
-
-const Name *ObjCPropertyDeclaration::setterName() const
-{ return _setterName; }
-
-void ObjCPropertyDeclaration::setSetterName(const Name *setterName)
-{ _setterName = setterName; }
-
-void ObjCPropertyDeclaration::setType(const FullySpecifiedType &type)
-{ _type = type; }
-
-FullySpecifiedType ObjCPropertyDeclaration::type() const
-{ return _type; }
-
-void ObjCPropertyDeclaration::visitSymbol0(SymbolVisitor *visitor)
-{
- if (visitor->visit(this)) {
- }
-}