diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2018-04-23 14:48:14 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2018-04-26 09:56:46 +0000 |
commit | 12a2c68789918637f7c28ef0b06d9e70b5fae0ca (patch) | |
tree | be4c142046e2563a056470e7e235065944a42c9d /src | |
parent | 2ce01aa8ca69b882e4186625667d191f3428fc3a (diff) |
Clean up manual reference counting of QQmlScriptData
QQmlScriptData is another data type that is best reference counted using
automatic means.
Change-Id: I9e25ac81ccdc03c2eefa35fcecc9cdfcc06dfe0a
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/compiler/qv4compileddata.cpp | 2 | ||||
-rw-r--r-- | src/qml/compiler/qv4compileddata_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlobjectcreator.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 13 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader_p.h | 4 |
5 files changed, 8 insertions, 15 deletions
diff --git a/src/qml/compiler/qv4compileddata.cpp b/src/qml/compiler/qv4compileddata.cpp index 52783e9970..8f8514535a 100644 --- a/src/qml/compiler/qv4compileddata.cpp +++ b/src/qml/compiler/qv4compileddata.cpp @@ -216,8 +216,6 @@ void CompilationUnit::unlink() propertyCaches.clear(); - for (int ii = 0; ii < dependentScripts.count(); ++ii) - dependentScripts.at(ii)->release(); dependentScripts.clear(); typeNameCache = nullptr; diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h index ee71a5c6c4..fff593941c 100644 --- a/src/qml/compiler/qv4compileddata_p.h +++ b/src/qml/compiler/qv4compileddata_p.h @@ -969,7 +969,7 @@ public: int totalParserStatusCount = 0; // Number of instantiated types that are QQmlParserStatus subclasses int totalObjectCount = 0; // Number of objects explicitly instantiated - QVector<QQmlScriptData *> dependentScripts; + QVector<QQmlRefPointer<QQmlScriptData>> dependentScripts; ResolvedTypeReferenceMap resolvedTypes; bool verifyChecksum(const DependentTypesHasher &dependencyHasher) const; diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 17734a0f97..6429e06070 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -193,7 +193,7 @@ QObject *QQmlObjectCreator::create(int subComponentIndex, QObject *parent, QQmlI context->importedScripts.set(v4, scripts); QV4::ScopedValue v(scope); for (int i = 0; i < compilationUnit->dependentScripts.count(); ++i) { - QQmlScriptData *s = compilationUnit->dependentScripts.at(i); + QQmlRefPointer<QQmlScriptData> s = compilationUnit->dependentScripts.at(i); scripts->putIndexed(i, (v = s->scriptValueForContext(context))); } } else if (sharedState->creationContext) { diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index 57acb1f400..7023bb98c6 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -2374,8 +2374,7 @@ void QQmlTypeData::done() } m_compiledData->typeNameCache->add(qualifier.toString(), scriptIndex, enclosingNamespace); - QQmlScriptData *scriptData = script.script->scriptData(); - scriptData->addref(); + QQmlRefPointer<QQmlScriptData> scriptData = script.script->scriptData(); m_compiledData->dependentScripts << scriptData; } } @@ -2947,19 +2946,15 @@ void QQmlScriptData::clear() } QQmlScriptBlob::QQmlScriptBlob(const QUrl &url, QQmlTypeLoader *loader) -: QQmlTypeLoader::Blob(url, JavaScriptFile, loader), m_scriptData(nullptr) +: QQmlTypeLoader::Blob(url, JavaScriptFile, loader) { } QQmlScriptBlob::~QQmlScriptBlob() { - if (m_scriptData) { - m_scriptData->release(); - m_scriptData = nullptr; - } } -QQmlScriptData *QQmlScriptBlob::scriptData() const +QQmlRefPointer<QQmlScriptData> QQmlScriptBlob::scriptData() const { return m_scriptData; } @@ -3101,7 +3096,7 @@ void QQmlScriptBlob::scriptImported(const QQmlRefPointer<QQmlScriptBlob> &blob, void QQmlScriptBlob::initializeFromCompilationUnit(const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit) { Q_ASSERT(!m_scriptData); - m_scriptData = new QQmlScriptData(); + m_scriptData.adopt(new QQmlScriptData()); m_scriptData->url = finalUrl(); m_scriptData->urlString = finalUrlString(); m_scriptData->m_precompiledScript = unit; diff --git a/src/qml/qml/qqmltypeloader_p.h b/src/qml/qml/qqmltypeloader_p.h index 1d78364548..11e211012d 100644 --- a/src/qml/qml/qqmltypeloader_p.h +++ b/src/qml/qml/qqmltypeloader_p.h @@ -573,7 +573,7 @@ public: QQmlRefPointer<QQmlScriptBlob> script; }; - QQmlScriptData *scriptData() const; + QQmlRefPointer<QQmlScriptData> scriptData() const; protected: void dataReceived(const SourceCodeData &) override; @@ -587,7 +587,7 @@ private: void initializeFromCompilationUnit(const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit); QList<ScriptReference> m_scripts; - QQmlScriptData *m_scriptData; + QQmlRefPointer<QQmlScriptData> m_scriptData; }; class Q_AUTOTEST_EXPORT QQmlQmldirData : public QQmlTypeLoader::Blob |