diff options
author | Thomas Hartmann <Thomas.Hartmann@nokia.com> | 2010-12-13 16:46:29 +0100 |
---|---|---|
committer | Thomas Hartmann <Thomas.Hartmann@nokia.com> | 2010-12-13 17:51:37 +0100 |
commit | 8e5eaf821ff52c8b995b784217edee986e2d739d (patch) | |
tree | 1a96616b0e47e54d5762afeecfcdb1b52e31e137 | |
parent | bee04cf1f5829f43eeb6d71c1d1f1914ff387a8d (diff) | |
download | qt-creator-8e5eaf821ff52c8b995b784217edee986e2d739d.tar.gz |
QMlJSCheck: Components have their own scope for ids
Each Components starts a new scope for ids. Using a stack to check
this properly.
-rw-r--r-- | src/libs/qmljs/qmljscheck.cpp | 22 | ||||
-rw-r--r-- | src/libs/qmljs/qmljscheck.h | 2 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index db4aa839f0..1e2846e774 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -403,13 +403,27 @@ bool Check::visit(UiProgram *) bool Check::visit(UiObjectInitializer *) { - m_propertyStack.push(StringSet()); - return true; + m_propertyStack.push(StringSet()); + UiObjectDefinition *objectDefinition = cast<UiObjectDefinition *>(parent()); + if (objectDefinition && objectDefinition->qualifiedTypeNameId->name->asString() == "Component") + m_idStack.push(StringSet()); + UiObjectBinding *objectBinding = cast<UiObjectBinding *>(parent()); + if (objectBinding && objectBinding->qualifiedTypeNameId->name->asString() == "Component") + m_idStack.push(StringSet()); + if (m_idStack.isEmpty()) + m_idStack.push(StringSet()); + return true; } void Check::endVisit(UiObjectInitializer *) { m_propertyStack.pop(); + UiObjectDefinition *objectDenition = cast<UiObjectDefinition *>(parent()); + if (objectDenition && objectDenition->qualifiedTypeNameId->name->asString() == "Component") + m_idStack.pop(); + UiObjectBinding *objectBinding = cast<UiObjectBinding *>(parent()); + if (objectBinding && objectBinding->qualifiedTypeNameId->name->asString() == "Component") + m_idStack.pop(); } void Check::checkProperty(UiQualifiedId *qualifiedId) @@ -501,11 +515,11 @@ bool Check::visit(UiScriptBinding *ast) return false; } - if (m_ids.contains(id)) { + if (m_idStack.top().contains(id)) { error(loc, Check::tr("ids must be unique")); return false; } - m_ids.insert(id); + m_idStack.top().insert(id); } checkProperty(ast->qualifiedId); diff --git a/src/libs/qmljs/qmljscheck.h b/src/libs/qmljs/qmljscheck.h index 9bbb6595fa..e6df22db14 100644 --- a/src/libs/qmljs/qmljscheck.h +++ b/src/libs/qmljs/qmljscheck.h @@ -131,7 +131,7 @@ private: const Interpreter::Value *_lastValue; QList<AST::Node *> _chain; - QSet<QString> m_ids; + QStack<StringSet> m_idStack; QStack<StringSet> m_propertyStack; }; |