forked from qt-creator/qt-creator
Enable lazy lookup.
This commit is contained in:
@@ -41,7 +41,7 @@
|
||||
|
||||
#include <QtDebug>
|
||||
|
||||
#define CPLUSPLUS_NO_LAZY_LOOKUP
|
||||
//#define CPLUSPLUS_NO_LAZY_LOOKUP
|
||||
|
||||
using namespace CPlusPlus;
|
||||
|
||||
@@ -229,7 +229,7 @@ QList<Symbol *> LookupContext::lookup(const Name *name, Scope *scope) const
|
||||
}
|
||||
|
||||
ClassOrNamespace::ClassOrNamespace(CreateBindings *factory, ClassOrNamespace *parent)
|
||||
: _factory(factory), _parent(parent), _flushing(false)
|
||||
: _factory(factory), _parent(parent)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -483,13 +483,12 @@ ClassOrNamespace *ClassOrNamespace::nestedClassOrNamespace(const QByteArray &nam
|
||||
void ClassOrNamespace::flush()
|
||||
{
|
||||
#ifndef CPLUSPLUS_NO_LAZY_LOOKUP
|
||||
if (! _flushing) {
|
||||
_flushing = true;
|
||||
if (! _todo.isEmpty()) {
|
||||
const QList<Symbol *> todo = _todo;
|
||||
_todo.clear();
|
||||
|
||||
while (! _todo.isEmpty()) {
|
||||
Symbol *member = _todo.takeFirst();
|
||||
foreach (Symbol *member, todo)
|
||||
_factory->process(member, this);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -92,7 +92,6 @@ private:
|
||||
QHash<QByteArray, ClassOrNamespace *> _classOrNamespaces;
|
||||
QList<Enum *> _enums;
|
||||
QList<Symbol *> _todo;
|
||||
bool _flushing;
|
||||
|
||||
friend class CreateBindings;
|
||||
};
|
||||
|
||||
@@ -590,7 +590,7 @@ ResolveExpression::resolveBaseExpression(const QList<LookupItem> &baseResults, i
|
||||
if (NamedType *namedTy = ty->asNamedType()) {
|
||||
const Name *arrowAccessOp = control()->operatorNameId(OperatorNameId::ArrowOp);
|
||||
|
||||
if (ClassOrNamespace *b = _context.classOrNamespace(namedTy->name(), result.lastVisibleSymbol()->scope())) {
|
||||
if (ClassOrNamespace *b = _context.classOrNamespace(namedTy->name(), result.lastVisibleSymbol())) {
|
||||
foreach (Symbol *overload, b->lookup(arrowAccessOp)) {
|
||||
if (Function *funTy = overload->type()->asFunctionType()) {
|
||||
FullySpecifiedType f = instantiate(namedTy->name(), funTy);
|
||||
@@ -667,7 +667,7 @@ ResolveExpression::resolveMemberExpression(const QList<LookupItem> &baseResults,
|
||||
results += resolveMember(memberName, klass);
|
||||
|
||||
else if (NamedType *namedTy = ty->asNamedType()) {
|
||||
if (ClassOrNamespace *b = _context.classOrNamespace(namedTy->name(), r.lastVisibleSymbol()->scope())) {
|
||||
if (ClassOrNamespace *b = _context.classOrNamespace(namedTy->name(), r.lastVisibleSymbol())) {
|
||||
foreach (Symbol *c, b->lookup(memberName))
|
||||
results.append(LookupItem(instantiate(namedTy->name(), c), c));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user