[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdevplatform/language/duchain
From: David Nolden <david.nolden.kde () art-master ! de>
Date: 2008-05-31 22:53:19
Message-ID: 1212274399.586039.20889.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 815016 by zwabel:
Performance improvement: Remove unneeded and unused matching code, which \
also called qualifiedIdentifier() which is slow
M +7 -95 ducontext.cpp
M +2 -2 ducontext.h
--- trunk/KDE/kdevplatform/language/duchain/ducontext.cpp #815015:815016
@@ -422,26 +422,21 @@
return d_func()->m_propagateDeclarations;
}
-QList<Declaration*> DUContext::findLocalDeclarations( const \
QualifiedIdentifier& identifier, const SimpleCursor & position, const \
TopDUContext* topContext, const AbstractType::Ptr& dataType, bool \
allowUnqualifiedMatch, SearchFlags flags ) const +QList<Declaration*> \
DUContext::findLocalDeclarations( const QualifiedIdentifier& identifier, \
const SimpleCursor & position, const TopDUContext* topContext, const \
AbstractType::Ptr& dataType, SearchFlags flags ) const {
ENSURE_CAN_READ
QList<Declaration*> ret;
- findLocalDeclarationsInternal(identifier, position.isValid() ? position \
: range().end, dataType, allowUnqualifiedMatch, ret, topContext ? \
topContext->importTrace(this->topContext()) : ImportTrace(), flags); + \
findLocalDeclarationsInternal(identifier, position.isValid() ? position : \
range().end, dataType, ret, topContext ? \
topContext->importTrace(this->topContext()) : ImportTrace(), flags); \
return ret; }
-void DUContext::findLocalDeclarationsInternal( const QualifiedIdentifier& \
identifier, const SimpleCursor & position, const AbstractType::Ptr& \
dataType, bool allowUnqualifiedMatch, QList<Declaration*>& ret, const \
ImportTrace& trace, SearchFlags flags ) const +void \
DUContext::findLocalDeclarationsInternal( const QualifiedIdentifier& \
identifier, const SimpleCursor & position, const AbstractType::Ptr& \
dataType, QList<Declaration*>& ret, const ImportTrace& trace, SearchFlags \
flags ) const {
Q_D(const DUContext);
if( identifier.explicitlyGlobal() && parentContext() )
return;
- ///@todo use flags
- QLinkedList<Declaration*> tryToResolve;
- QLinkedList<Declaration*> ensureResolution;
- QList<Declaration*> resolved;
-
{
QMutexLocker lock(&DUContextPrivate::m_localDeclarationsMutex);
Identifier lastIdentifier = identifier.last();
@@ -463,94 +458,11 @@
if((flags & OnlyFunctions) && \
!dynamic_cast<AbstractFunctionDeclaration*>(declaration)) continue;
- QualifiedIdentifier::MatchTypes m = \
identifier.match(declaration->identifier());
- switch (m) {
- case QualifiedIdentifier::NoMatch:
- continue;
-
- case QualifiedIdentifier::EndsWith:
- // identifier is a more complete specification...
- // Try again with a qualified definition identifier
- ensureResolution.append(declaration);
- continue;
-
- case QualifiedIdentifier::TargetEndsWith : ///NOTE: This cannot \
happen, because declaration() identifier is of type \
Identifier
- // definition is a more complete specification...
- if (!allowUnqualifiedMatch)
- tryToResolve.append(declaration);
- else
- resolved.append(declaration);
- continue;
-
- case QualifiedIdentifier::ExactMatch:
- if (!allowUnqualifiedMatch)
- ensureResolution.append(declaration);
- else
- resolved.append(declaration);
- continue;
- }
+ if (!dataType || dataType == declaration->abstractType())
+ if (type() == Class || type() == Template || position > \
declaration->range().start || !position.isValid()) ///@todo This is \
C++-specific + ret.append(declaration);
}
}
-
- foreach (Declaration* declaration, resolved)
- if (!dataType || dataType == declaration->abstractType())
- if (type() == Class || type() == Template || position > \
declaration->range().start || !position.isValid()) ///@todo This is \
C++-specific
- ret.append(declaration);
-
- if (tryToResolve.isEmpty() && ensureResolution.isEmpty())
- return;
-
- QMutableLinkedListIterator<Declaration*> it = ensureResolution;
- while (it.hasNext()) {
- QualifiedIdentifier::MatchTypes m = \
identifier.match(it.next()->qualifiedIdentifier());
- switch (m) {
- case QualifiedIdentifier::NoMatch:
- case QualifiedIdentifier::EndsWith:
- break;
-
- case QualifiedIdentifier::TargetEndsWith:
- case QualifiedIdentifier::ExactMatch:
- resolved.append(it.value());
- break;
- }
- }
-
- foreach (Declaration* declaration, resolved)
- if (!dataType || dataType == declaration->abstractType())
- if (type() == Class || position >= declaration->range().start || \
!position.isValid()) ///@todo This is C++-specific
- ret.append(declaration);
-
- if (!ret.isEmpty())
- // Match(es)
- return;
-
- it = tryToResolve;
- while (it.hasNext()) {
- QualifiedIdentifier::MatchTypes m = \
identifier.match(it.next()->qualifiedIdentifier());
- switch (m) {
- case QualifiedIdentifier::NoMatch:
- case QualifiedIdentifier::EndsWith:
- break;
-
- case QualifiedIdentifier::TargetEndsWith:
- case QualifiedIdentifier::ExactMatch:
- resolved.append(it.value());
- break;
- }
- }
-
- foreach (Declaration* declaration, resolved)
- if (!dataType || dataType == declaration->abstractType())
- if (type() == Class || position >= declaration->range().start || \
!position.isValid()) ///@todo This is C++-specific
- ret.append(declaration);
-
- //if (!ret.isEmpty())
- // Match(es)... don't need to check, returning anyway
-
-
- // TODO: namespace abbreviations
-
- return;
}
bool DUContext::foundEnough( const QList<Declaration*>& ret ) const {
@@ -565,7 +477,7 @@
Q_D(const DUContext);
if( type() != Namespace ) { //If we're in a namespace, delay all the \
searching into the top-context, because only that has the overview to pick \
the correct declarations. foreach( const QualifiedIdentifier& identifier, \
baseIdentifiers )
- findLocalDeclarationsInternal(identifier, position, dataType, \
flags & InImportedParentContext, ret, trace, flags); + \
findLocalDeclarationsInternal(identifier, position, dataType, ret, trace, \
flags);
if( foundEnough(ret) )
return true;
--- trunk/KDE/kdevplatform/language/duchain/ducontext.h #815015:815016
@@ -295,7 +295,7 @@
*
* Does not search imported parent-contexts(like base-classes).
*/
- QList<Declaration*> findLocalDeclarations(const QualifiedIdentifier& \
identifier, const SimpleCursor& position = SimpleCursor::invalid(), const \
TopDUContext* topContext = 0, const AbstractType::Ptr& dataType = \
AbstractType::Ptr(), bool allowUnqualifiedMatch = false, SearchFlags flags \
= NoSearchFlags) const; + QList<Declaration*> findLocalDeclarations(const \
QualifiedIdentifier& identifier, const SimpleCursor& position = \
SimpleCursor::invalid(), const TopDUContext* topContext = 0, const \
AbstractType::Ptr& dataType = AbstractType::Ptr(), SearchFlags flags = \
NoSearchFlags) const;
/**
* Clears all local declarations. Does not delete the declaration; the \
caller @@ -494,7 +494,7 @@
/// Logic for calculating the fully qualified scope name
QualifiedIdentifier scopeIdentifierInternal(DUContext* context) const;
- virtual void findLocalDeclarationsInternal( const QualifiedIdentifier& \
identifier, const SimpleCursor & position, const AbstractType::Ptr& \
dataType, bool allowUnqualifiedMatch, QList<Declaration*>& ret, const \
ImportTrace& trace, SearchFlags flags ) const; + virtual void \
findLocalDeclarationsInternal( const QualifiedIdentifier& identifier, const \
SimpleCursor & position, const AbstractType::Ptr& dataType, \
QList<Declaration*>& ret, const ImportTrace& trace, SearchFlags flags ) \
const;
/// Context search implementation
virtual void findContextsInternal(ContextType contextType, const \
QList<QualifiedIdentifier>& identifier, const SimpleCursor& position, \
QList<DUContext*>& ret, SearchFlags flags = NoSearchFlags) const;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic