summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@nokia.com>2010-12-13 16:46:29 +0100
committerThomas Hartmann <Thomas.Hartmann@nokia.com>2010-12-13 17:51:37 +0100
commit8e5eaf821ff52c8b995b784217edee986e2d739d (patch)
tree1a96616b0e47e54d5762afeecfcdb1b52e31e137
parentbee04cf1f5829f43eeb6d71c1d1f1914ff387a8d (diff)
downloadqt-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.cpp22
-rw-r--r--src/libs/qmljs/qmljscheck.h2
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;
};