[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