diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index 4e211a41cad9e6c547b383236e3f128de3404fe1..b3c4a30b9bba4372487dab5d9bb54173b8ee00db 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -384,6 +384,7 @@ private: const QLatin1String tag("type"); Q_ASSERT(_xml.isStartElement() && _xml.name() == tag); + bool doInsert = true; QString name, defaultPropertyName; int major = -1, minor = -1; QString extends; @@ -423,6 +424,11 @@ private: } else if (attr.name() == QLatin1String("extends")) { if (! attr.value().isEmpty()) extends = attr.value().toString(); + + if (extends == name) { + invalidAttr(extends, QLatin1String("extends"), tag); + doInsert = false; + } } else { ignoreAttr(attr); } @@ -450,7 +456,10 @@ private: unexpectedElement(_xml.name(), tag); } - _objects->insert(name, metaObject); + if (doInsert) + _objects->insert(name, metaObject); + else + delete metaObject; } bool split(const QString &name, QString *packageName, QString *className) {