diff options
5 files changed, 35 insertions, 0 deletions
diff --git a/src/lib/corelib/language/evaluatorscriptclass.cpp b/src/lib/corelib/language/evaluatorscriptclass.cpp index b7c2576df..18d7fd83f 100644 --- a/src/lib/corelib/language/evaluatorscriptclass.cpp +++ b/src/lib/corelib/language/evaluatorscriptclass.cpp @@ -177,6 +177,13 @@ private: QScriptValue originalValue; if (data->item->propertyDeclaration(propertyName->toString()).isScalar()) { const Item *item = itemOfProperty; + if (item->type() == ItemType::Module || item->type() == ItemType::Export) { + const QString errorMessage = Tr::tr("The special value 'original' cannot " + "be used on the right-hand side of a property declaration."); + extraScope = engine->currentContext()->throwError(errorMessage); + result.second = false; + return result; + } while (item->type() == ItemType::ModuleInstance) item = item->prototype(); if (item->type() != ItemType::Module && item->type() != ItemType::Export) { diff --git a/tests/auto/language/testdata/erroneous/modules/module-with-invalid-original/module-with-invalid-original.qbs b/tests/auto/language/testdata/erroneous/modules/module-with-invalid-original/module-with-invalid-original.qbs new file mode 100644 index 000000000..ef2404412 --- /dev/null +++ b/tests/auto/language/testdata/erroneous/modules/module-with-invalid-original/module-with-invalid-original.qbs @@ -0,0 +1,3 @@ +Module { + property string p: original +} diff --git a/tests/auto/language/testdata/erroneous/original-in-export-item.qbs b/tests/auto/language/testdata/erroneous/original-in-export-item.qbs new file mode 100644 index 000000000..51fedb9a2 --- /dev/null +++ b/tests/auto/language/testdata/erroneous/original-in-export-item.qbs @@ -0,0 +1,14 @@ +import qbs + +Project { + Product { + name: "a" + Export { + property string p: original + } + } + Product { + name: "b" + Depends { name: "a" } + } +} diff --git a/tests/auto/language/testdata/erroneous/original-in-module-prototype.qbs b/tests/auto/language/testdata/erroneous/original-in-module-prototype.qbs new file mode 100644 index 000000000..e7128092a --- /dev/null +++ b/tests/auto/language/testdata/erroneous/original-in-module-prototype.qbs @@ -0,0 +1,5 @@ +import qbs + +Product { + Depends { name: "module-with-invalid-original" } +} diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp index 961808f3d..4d24e773b 100644 --- a/tests/auto/language/tst_language.cpp +++ b/tests/auto/language/tst_language.cpp @@ -830,6 +830,12 @@ void TestLanguage::erroneousFiles_data() QTest::newRow("original-in-product-property") << "original-in-product-property.qbs" ":4:21.*The special value 'original' can only be used with module properties."; + QTest::newRow("original-in-module-prototype") + << "module-with-invalid-original.qbs:2:24.*The special value 'original' cannot be used " + "on the right-hand side of a property declaration."; + QTest::newRow("original-in-export-item") + << "original-in-export-item.qbs:7:32.*The special value 'original' cannot be used " + "on the right-hand side of a property declaration."; QTest::newRow("mismatching-multiplex-dependency") << "mismatching-multiplex-dependency.qbs:9:5.*Dependency from product " "'b \\{\"architecture\":\"mips\"\\}' to product 'a \\{\"architecture\":\"mips\"\\}'" |