diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-05-26 16:21:21 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-05-29 13:30:40 +0000 |
commit | c35ff7aa67fc8af6ccb98bc2eb8f59e8e9ad3bcf (patch) | |
tree | bcfc781d2f6932f3a810f9880b39d095c0ec9b87 /src/lib/corelib/language/evaluatorscriptclass.cpp | |
parent | 624f19acc7c4c3cf6487cc14062cb7a2284af4ab (diff) |
Ensure every module property is tracked when evaluating
When evaluating a property we take note of the module properties it
references. To make that work in every circumstance every module item
must have the name property set before evaluating any properties.
Also, for debugging it's extremely helpful if every created item has a
location assigned. Add sensible locations for newly created items.
The special item containing the outer property and items for setting
parameters had the type ModuleInstance which is wrong. Add new dedicated
item types Outer and ModuleParameters
Change-Id: I5a58a02734f3809525c2752b5b6fb4358f8b286b
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/lib/corelib/language/evaluatorscriptclass.cpp')
-rwxr-xr-x | src/lib/corelib/language/evaluatorscriptclass.cpp | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/lib/corelib/language/evaluatorscriptclass.cpp b/src/lib/corelib/language/evaluatorscriptclass.cpp index c43c6725e..5d96be561 100755 --- a/src/lib/corelib/language/evaluatorscriptclass.cpp +++ b/src/lib/corelib/language/evaluatorscriptclass.cpp @@ -223,7 +223,7 @@ private: if (value->sourceUsesBase()) outerValue->setSourceUsesBaseFlag(); outerValue->setLocation(value->line(), value->column()); - outerItem = Item::create(data->item->pool(), ItemType::ModuleInstance); + outerItem = Item::create(data->item->pool(), ItemType::Outer); outerItem->setProperty(propertyName->toString(), outerValue); } if (overrides.toBool()) @@ -542,16 +542,13 @@ public: || itemOfProperty->type() == ItemType::Export)) { const VariantValueConstPtr varValue = itemOfProperty->variantProperty(QLatin1String("name")); - // QBS_CHECK(varValue); - // TODO: Check why the base module sometimes has no name. Code suggests it has to have one. - if (varValue) { - m_stackUpdate = true; - const QualifiedId fullPropName - = QualifiedId::fromString(varValue->value().toString()) << name.toString(); - if (!requestedProperties.empty()) - propertyDependencies[fullPropName].insert(requestedProperties.top()); - m_requestedProperties.push(fullPropName); - } + QBS_ASSERT(varValue, return); + m_stackUpdate = true; + const QualifiedId fullPropName + = QualifiedId::fromString(varValue->value().toString()) << name.toString(); + if (!requestedProperties.empty()) + propertyDependencies[fullPropName].insert(requestedProperties.top()); + m_requestedProperties.push(fullPropName); } } |