diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index 59acd90929beaf50d9dad17d0158d201cfd1d77e..89eb241d1f86a32fc390ffaa3478ada1bdb1ea6a 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -731,6 +731,25 @@ ScopeChain::ScopeChain() { } +ScopeChain::QmlComponentChain::QmlComponentChain() + : rootObject(0), ids(0) +{ +} + +ScopeChain::QmlComponentChain::~QmlComponentChain() +{ + qDeleteAll(instantiatingComponents); +} + +void ScopeChain::QmlComponentChain::clear() +{ + qDeleteAll(instantiatingComponents); + instantiatingComponents.clear(); + rootObject = 0; + functionScopes.clear(); + ids = 0; +} + void ScopeChain::QmlComponentChain::add(QList<const ObjectValue *> *list) const { foreach (QmlComponentChain *parent, instantiatingComponents) diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h index ace0444e345481d20ba742e5b3af2828d4b26ea8..a0ab3fbc4c34f27bc71ba165d53616f1e8bfb2ce 100644 --- a/src/libs/qmljs/qmljsinterpreter.h +++ b/src/libs/qmljs/qmljsinterpreter.h @@ -229,9 +229,8 @@ public: struct QmlComponentChain { - QmlComponentChain() - : rootObject(0), ids(0) - {} + QmlComponentChain(); + ~QmlComponentChain(); QList<QmlComponentChain *> instantiatingComponents; const ObjectValue *rootObject; @@ -239,6 +238,7 @@ public: const ObjectValue *ids; void add(QList<const ObjectValue *> *list) const; + void clear(); }; const ObjectValue *globalScope; diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index 07762a94b095e7257bc20a65e1574e3ca8bfc275..660d4f7ff7dfe27f69d219f0f4ca6a0aa95cbfb6 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -48,6 +48,7 @@ void Link::scopeChainAt(Document::Ptr doc, const QList<Node *> &astPath) if (doc->qmlProgram()) { _context->setLookupMode(Context::QmlLookup); + scopeChain.qmlComponentScope.clear(); makeComponentChain(doc, &scopeChain.qmlComponentScope, &componentScopes); if (const ObjectValue *typeEnvironment = _context->typeEnvironment(doc.data()))