summaryrefslogtreecommitdiff
path: root/src/libs/qmljs/qmljsscopebuilder.cpp
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-09-28 15:15:09 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2011-09-28 15:29:05 +0200
commit8faafc2f0c189efb2b3f57ebd37c00834ca7bcb7 (patch)
treea5ae4a3635c1ac8f24368d0983dd240501b4e4e1 /src/libs/qmljs/qmljsscopebuilder.cpp
parent373d51a1ed5cc4bb1de8e648e232598c0e3ced54 (diff)
downloadqt-creator-8faafc2f0c189efb2b3f57ebd37c00834ca7bcb7.tar.gz
QmlJS: Fix saving and restoring QML scope objects.
Change-Id: I621d7c3dbc8d5613b5d9ffddd08acd582559990b Reviewed-on: http://codereview.qt-project.org/5720 Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com>
Diffstat (limited to 'src/libs/qmljs/qmljsscopebuilder.cpp')
-rw-r--r--src/libs/qmljs/qmljsscopebuilder.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/libs/qmljs/qmljsscopebuilder.cpp b/src/libs/qmljs/qmljsscopebuilder.cpp
index 3d0ac107ed..92f90ab4a7 100644
--- a/src/libs/qmljs/qmljsscopebuilder.cpp
+++ b/src/libs/qmljs/qmljsscopebuilder.cpp
@@ -38,6 +38,8 @@
#include "qmljsscopechain.h"
#include "parser/qmljsast_p.h"
+#include <utils/qtcassert.h>
+
using namespace QmlJS;
using namespace QmlJS::AST;
@@ -58,8 +60,11 @@ void ScopeBuilder::push(AST::Node *node)
Node *qmlObject = cast<UiObjectDefinition *>(node);
if (! qmlObject)
qmlObject = cast<UiObjectBinding *>(node);
- if (qmlObject)
+ if (qmlObject) {
+ // save the previous scope objects
+ _qmlScopeObjects.push(_scopeChain->qmlScopeObjects());
setQmlScopeObject(qmlObject);
+ }
// JS scopes
switch (node->kind) {
@@ -114,9 +119,11 @@ void ScopeBuilder::pop()
}
// QML scope object
- if (! _nodes.isEmpty()
- && (cast<UiObjectDefinition *>(toRemove) || cast<UiObjectBinding *>(toRemove)))
- setQmlScopeObject(_nodes.last());
+ if (cast<UiObjectDefinition *>(toRemove) || cast<UiObjectBinding *>(toRemove)) {
+ // restore the previous scope objects
+ QTC_ASSERT(!_qmlScopeObjects.isEmpty(), return);
+ _scopeChain->setQmlScopeObjects(_qmlScopeObjects.pop());
+ }
}
void ScopeBuilder::setQmlScopeObject(Node *node)