C++: cleanup setting the bindings in the lookup context class.

Change-Id: I114d7b1116ee5e345675a332c30312614c0faf5f
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This commit is contained in:
Erik Verbruggen
2014-02-13 11:42:56 +01:00
parent 3746499472
commit e61d688025
5 changed files with 26 additions and 53 deletions

View File

@@ -160,16 +160,19 @@ LookupContext::LookupContext(Document::Ptr thisDocument,
: _expressionDocument(Document::create(QLatin1String("<LookupContext>")))
, _thisDocument(thisDocument)
, _snapshot(snapshot)
, _bindings(new CreateBindings(thisDocument, snapshot))
, m_expandTemplates(false)
{
}
LookupContext::LookupContext(Document::Ptr expressionDocument,
Document::Ptr thisDocument,
const Snapshot &snapshot)
const Snapshot &snapshot,
QSharedPointer<CreateBindings> bindings)
: _expressionDocument(expressionDocument)
, _thisDocument(thisDocument)
, _snapshot(snapshot)
, _bindings(bindings)
, m_expandTemplates(false)
{
}
@@ -277,21 +280,6 @@ QList<LookupItem> LookupContext::lookupByUsing(const Name *name, Scope *scope) c
}
QSharedPointer<CreateBindings> LookupContext::bindings() const
{
if (! _bindings) {
_bindings = QSharedPointer<CreateBindings>(new CreateBindings(_thisDocument, _snapshot));
_bindings->setExpandTemplates(m_expandTemplates);
}
return _bindings;
}
void LookupContext::setBindings(QSharedPointer<CreateBindings> bindings)
{
_bindings = bindings;
}
Document::Ptr LookupContext::expressionDocument() const
{ return _expressionDocument; }
@@ -533,6 +521,7 @@ ClassOrNamespace::ClassOrNamespace(CreateBindings *factory, ClassOrNamespace *pa
, _name(0)
#endif // DEBUG_LOOKUP
{
Q_ASSERT(factory);
}
ClassOrNamespace::~ClassOrNamespace()

View File

@@ -63,8 +63,11 @@ class CreateBindings;
class CPLUSPLUS_EXPORT ClassOrNamespace
{
public:
Q_DISABLE_COPY(ClassOrNamespace)
ClassOrNamespace(CreateBindings *factory, ClassOrNamespace *parent);
public:
~ClassOrNamespace();
const TemplateNameId *templateId() const;
@@ -286,7 +289,8 @@ public:
LookupContext(Document::Ptr expressionDocument,
Document::Ptr thisDocument,
const Snapshot &snapshot);
const Snapshot &snapshot,
QSharedPointer<CreateBindings> bindings = QSharedPointer<CreateBindings>());
LookupContext(const LookupContext &other);
LookupContext &operator = (const LookupContext &other);
@@ -308,10 +312,8 @@ public:
ClassOrNamespace *lookupParent(Symbol *symbol) const;
/// \internal
QSharedPointer<CreateBindings> bindings() const;
/// \internal
void setBindings(QSharedPointer<CreateBindings> bindings);
QSharedPointer<CreateBindings> bindings() const
{ return _bindings; }
static QList<const Name *> fullyQualifiedName(Symbol *symbol);
static QList<const Name *> path(Symbol *symbol);
@@ -338,7 +340,7 @@ private:
Snapshot _snapshot;
// Bindings
mutable QSharedPointer<CreateBindings> _bindings;
QSharedPointer<CreateBindings> _bindings;
bool m_expandTemplates;
};

View File

@@ -1150,7 +1150,7 @@ ClassOrNamespace *ResolveExpression::findClassForTemplateParameterInExpressionSc
ClassOrNamespace *resultBinding,
const FullySpecifiedType &ty) const
{
if (resultBinding && resultBinding->instantiationOrigin()) {
if (resultBinding) {
if (ClassOrNamespace *origin = resultBinding->instantiationOrigin()) {
foreach (Symbol *originSymbol, origin->symbols()) {
if (Scope *originScope = originSymbol->asScope()) {

View File

@@ -48,17 +48,6 @@ TypeOfExpression::TypeOfExpression():
{
}
void TypeOfExpression::reset()
{
m_thisDocument.clear();
m_snapshot = Snapshot();
m_ast = 0;
m_scope = 0;
m_lookupContext = LookupContext();
m_bindings.clear();
m_environment.clear();
}
void TypeOfExpression::init(Document::Ptr thisDocument, const Snapshot &snapshot,
QSharedPointer<CreateBindings> bindings,
const QSet<const Declaration *> &autoDeclarationsBeingResolved)
@@ -68,7 +57,12 @@ void TypeOfExpression::init(Document::Ptr thisDocument, const Snapshot &snapshot
m_ast = 0;
m_scope = 0;
m_lookupContext = LookupContext();
Q_ASSERT(m_bindings.isNull());
m_bindings = bindings;
if (m_bindings.isNull())
m_bindings.reset(new CreateBindings(thisDocument, snapshot));
m_environment.clear();
m_autoDeclarationsBeingResolved = autoDeclarationsBeingResolved;
}
@@ -111,17 +105,12 @@ QList<LookupItem> TypeOfExpression::operator()(ExpressionAST *expression,
m_scope = scope;
m_documents.append(document);
m_lookupContext = LookupContext(document, m_thisDocument, m_snapshot);
m_lookupContext.setBindings(m_bindings);
m_lookupContext = LookupContext(document, m_thisDocument, m_snapshot, m_bindings);
Q_ASSERT(!m_bindings.isNull());
m_lookupContext.setExpandTemplates(m_expandTemplates);
ResolveExpression resolve(m_lookupContext, m_autoDeclarationsBeingResolved);
const QList<LookupItem> items = resolve(m_ast, scope);
if (! m_bindings)
m_lookupContext = resolve.context();
return items;
return resolve(m_ast, scope);
}
QList<LookupItem> TypeOfExpression::reference(ExpressionAST *expression,
@@ -133,17 +122,12 @@ QList<LookupItem> TypeOfExpression::reference(ExpressionAST *expression,
m_scope = scope;
m_documents.append(document);
m_lookupContext = LookupContext(document, m_thisDocument, m_snapshot);
m_lookupContext.setBindings(m_bindings);
m_lookupContext = LookupContext(document, m_thisDocument, m_snapshot, m_bindings);
Q_ASSERT(!m_bindings.isNull());
m_lookupContext.setExpandTemplates(m_expandTemplates);
ResolveExpression resolve(m_lookupContext, m_autoDeclarationsBeingResolved);
const QList<LookupItem> items = resolve.reference(m_ast, scope);
if (! m_bindings)
m_lookupContext = resolve.context();
return items;
return resolve.reference(m_ast, scope);
}
QByteArray TypeOfExpression::preprocess(const QByteArray &utf8code) const

View File

@@ -65,8 +65,6 @@ public:
const QSet<const Declaration *> &autoDeclarationsBeingResolved
= QSet<const Declaration *>());
void reset();
enum PreprocessMode {
NoPreprocess,
Preprocess