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>
This commit is contained in:
parent
2ce01aa8ca
commit
12a2c68789
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue