summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Symbol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus/Symbol.cpp')
-rw-r--r--src/shared/cplusplus/Symbol.cpp442
1 files changed, 0 insertions, 442 deletions
diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp
deleted file mode 100644
index 864415064c..0000000000
--- a/src/shared/cplusplus/Symbol.cpp
+++ /dev/null
@@ -1,442 +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 "Symbol.h"
-#include "Symbols.h"
-#include "Control.h"
-#include "Names.h"
-#include "TranslationUnit.h"
-#include "Literals.h"
-#include "MemoryPool.h"
-#include "SymbolVisitor.h"
-#include "NameVisitor.h"
-#include "Scope.h"
-#include <cassert>
-
-using namespace CPlusPlus;
-
-class Symbol::HashCode: protected NameVisitor
-{
-public:
- HashCode()
- : _value(0)
- { }
-
- virtual ~HashCode()
- { }
-
- unsigned operator()(const Name *name)
- {
- unsigned previousValue = switchValue(0);
- accept(name);
- return switchValue(previousValue);
- }
-
-protected:
- unsigned switchValue(unsigned value)
- {
- unsigned previousValue = _value;
- _value = value;
- return previousValue;
- }
-
- virtual void visit(const Identifier *name)
- { _value = name->identifier()->hashCode(); }
-
- virtual void visit(const TemplateNameId *name)
- { _value = name->identifier()->hashCode(); }
-
- virtual void visit(const DestructorNameId *name)
- { _value = name->identifier()->hashCode(); }
-
- virtual void visit(const OperatorNameId *name)
- { _value = unsigned(name->kind()); }
-
- virtual void visit(const ConversionNameId *)
- { _value = 0; } // ### TODO: implement me
-
- virtual void visit(const QualifiedNameId *name)
- { _value = operator()(name->name()); }
-
- virtual void visit(const SelectorNameId *name)
- { _value = name->identifier()->hashCode(); }
-
-private:
- unsigned _value;
-};
-
-Symbol::Symbol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
- : _name(0),
- _scope(0),
- _next(0),
- _fileId(0),
- _sourceLocation(0),
- _hashCode(0),
- _storage(Symbol::NoStorage),
- _visibility(Symbol::Public),
- _index(0),
- _line(0),
- _column(0),
- _isGenerated(false),
- _isDeprecated(false),
- _isUnavailable(false)
-{
- setSourceLocation(sourceLocation, translationUnit);
- setName(name);
-}
-
-Symbol::~Symbol()
-{ }
-
-void Symbol::visitSymbol(SymbolVisitor *visitor)
-{
- if (visitor->preVisit(this))
- visitSymbol0(visitor);
- visitor->postVisit(this);
-}
-
-void Symbol::visitSymbol(Symbol *symbol, SymbolVisitor *visitor)
-{
- if (! symbol)
- return;
-
- symbol->visitSymbol(visitor);
-}
-
-unsigned Symbol::sourceLocation() const
-{ return _sourceLocation; }
-
-bool Symbol::isGenerated() const
-{ return _isGenerated; }
-
-bool Symbol::isDeprecated() const
-{ return _isDeprecated; }
-
-void Symbol::setDeprecated(bool isDeprecated)
-{ _isDeprecated = isDeprecated; }
-
-bool Symbol::isUnavailable() const
-{ return _isUnavailable; }
-
-void Symbol::setUnavailable(bool isUnavailable)
-{ _isUnavailable = isUnavailable; }
-
-void Symbol::setSourceLocation(unsigned sourceLocation, TranslationUnit *translationUnit)
-{
- _sourceLocation = sourceLocation;
-
- if (translationUnit) {
- const Token &tk = translationUnit->tokenAt(sourceLocation);
- _isGenerated = tk.f.generated;
- translationUnit->getPosition(tk.offset, &_line, &_column, &_fileId);
- } else {
- _isGenerated = false;
- _line = 0;
- _column = 0;
- _fileId = 0;
- }
-}
-
-unsigned Symbol::line() const
-{
- return _line;
-}
-
-unsigned Symbol::column() const
-{
- return _column;
-}
-
-const StringLiteral *Symbol::fileId() const
-{
- return _fileId;
-}
-
-const char *Symbol::fileName() const
-{ return fileId()->chars(); }
-
-unsigned Symbol::fileNameLength() const
-{ return fileId()->size(); }
-
-const Name *Symbol::unqualifiedName() const
-{
- if (! _name)
- return 0;
-
- else if (const QualifiedNameId *q = _name->asQualifiedNameId())
- return q->name();
-
- return _name;
-}
-
-const Name *Symbol::name() const
-{ return _name; }
-
-void Symbol::setName(const Name *name)
-{
- _name = name;
-
- if (! _name)
- _hashCode = 0;
- else {
- HashCode hh;
- _hashCode = hh(unqualifiedName());
- }
-}
-
-const Identifier *Symbol::identifier() const
-{
- if (_name)
- return _name->identifier();
-
- return 0;
-}
-
-Scope *Symbol::enclosingScope() const
-{ return _scope; }
-
-void Symbol::setScope(Scope *scope)
-{
- assert(! _scope);
- _scope = scope;
-}
-
-Namespace *Symbol::enclosingNamespace() const
-{
- for (Scope *s = _scope; s; s = s->enclosingScope()) {
- if (Namespace *ns = s->asNamespace())
- return ns;
- }
- return 0;
-}
-
-Template *Symbol::enclosingTemplate() const
-{
- for (Scope *s = _scope; s; s = s->enclosingScope()) {
- if (Template *templ = s->asTemplate())
- return templ;
- }
- return 0;
-}
-
-Class *Symbol::enclosingClass() const
-{
- for (Scope *s = _scope; s; s = s->enclosingScope()) {
- if (Class *klass = s->asClass())
- return klass;
- }
- return 0;
-}
-
-Enum *Symbol::enclosingEnum() const
-{
- for (Scope *s = _scope; s; s = s->enclosingScope()) {
- if (Enum *e = s->asEnum())
- return e;
- }
- return 0;
-}
-
-Function *Symbol::enclosingFunction() const
-{
- for (Scope *s = _scope; s; s = s->enclosingScope()) {
- if (Function *fun = s->asFunction())
- return fun;
- }
- return 0;
-}
-
-Block *Symbol::enclosingBlock() const
-{
- for (Scope *s = _scope; s; s = s->enclosingScope()) {
- if (Block *block = s->asBlock())
- return block;
- }
- return 0;
-}
-
-unsigned Symbol::index() const
-{ return _index; }
-
-Symbol *Symbol::next() const
-{ return _next; }
-
-unsigned Symbol::hashCode() const
-{ return _hashCode; }
-
-int Symbol::storage() const
-{ return _storage; }
-
-void Symbol::setStorage(int storage)
-{ _storage = storage; }
-
-int Symbol::visibility() const
-{ return _visibility; }
-
-void Symbol::setVisibility(int visibility)
-{ _visibility = visibility; }
-
-bool Symbol::isFriend() const
-{ return _storage == Friend; }
-
-bool Symbol::isRegister() const
-{ return _storage == Register; }
-
-bool Symbol::isStatic() const
-{ return _storage == Static; }
-
-bool Symbol::isExtern() const
-{ return _storage == Extern; }
-
-bool Symbol::isMutable() const
-{ return _storage == Mutable; }
-
-bool Symbol::isTypedef() const
-{ return _storage == Typedef; }
-
-bool Symbol::isPublic() const
-{ return _visibility == Public; }
-
-bool Symbol::isProtected() const
-{ return _visibility == Protected; }
-
-bool Symbol::isPrivate() const
-{ return _visibility == Private; }
-
-bool Symbol::isScope() const
-{ return asScope() != 0; }
-
-bool Symbol::isEnum() const
-{ return asEnum() != 0; }
-
-bool Symbol::isFunction() const
-{ return asFunction() != 0; }
-
-bool Symbol::isNamespace() const
-{ return asNamespace() != 0; }
-
-bool Symbol::isTemplate() const
-{ return asTemplate() != 0; }
-
-bool Symbol::isClass() const
-{ return asClass() != 0; }
-
-bool Symbol::isForwardClassDeclaration() const
-{ return asForwardClassDeclaration() != 0; }
-
-bool Symbol::isQtPropertyDeclaration() const
-{ return asQtPropertyDeclaration() != 0; }
-
-bool Symbol::isQtEnum() const
-{ return asQtEnum() != 0; }
-
-bool Symbol::isBlock() const
-{ return asBlock() != 0; }
-
-bool Symbol::isUsingNamespaceDirective() const
-{ return asUsingNamespaceDirective() != 0; }
-
-bool Symbol::isUsingDeclaration() const
-{ return asUsingDeclaration() != 0; }
-
-bool Symbol::isDeclaration() const
-{ return asDeclaration() != 0; }
-
-bool Symbol::isArgument() const
-{ return asArgument() != 0; }
-
-bool Symbol::isTypenameArgument() const
-{ return asTypenameArgument() != 0; }
-
-bool Symbol::isBaseClass() const
-{ return asBaseClass() != 0; }
-
-bool Symbol::isObjCBaseClass() const
-{ return asObjCBaseClass() != 0; }
-
-bool Symbol::isObjCBaseProtocol() const
-{ return asObjCBaseProtocol() != 0; }
-
-bool Symbol::isObjCClass() const
-{ return asObjCClass() != 0; }
-
-bool Symbol::isObjCForwardClassDeclaration() const
-{ return asObjCForwardClassDeclaration() != 0; }
-
-bool Symbol::isObjCProtocol() const
-{ return asObjCProtocol() != 0; }
-
-bool Symbol::isObjCForwardProtocolDeclaration() const
-{ return asObjCForwardProtocolDeclaration() != 0; }
-
-bool Symbol::isObjCMethod() const
-{ return asObjCMethod() != 0; }
-
-bool Symbol::isObjCPropertyDeclaration() const
-{ return asObjCPropertyDeclaration() != 0; }
-
-void Symbol::copy(Symbol *other)
-{
- _sourceLocation = other->_sourceLocation;
- _name = other->_name;
- _hashCode = other->_hashCode;
- _storage = other->_storage;
- _visibility = other->_visibility;
- _scope = other->_scope;
- _index = other->_index;
- _next = other->_next;
- _fileId = other->_fileId;
- _line = other->_line;
- _column = other->_column;
-
- _isGenerated = other->_isGenerated;
- _isDeprecated = other->_isDeprecated;
-}