diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-09-06 10:17:47 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-08 09:00:18 +0200 |
commit | 34b6914970958ace37a3654600637b6fd3d2435c (patch) | |
tree | 131024227fa9e20f6eb085b1fe003a6c8a6b1152 /src | |
parent | 5b456c8da4462f9e11fa4da78a9e6ea86423a1e8 (diff) |
Free the parsed QML data structure when we're done compiling the type
The QQmlTypeData is going to stick around (and keep the important stuff
in its m_compiledData member), but the rest of the data we can
free.
Change-Id: If331504055960145911fef566b309f812dca5337
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 18 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader_p.h | 2 |
2 files changed, 11 insertions, 9 deletions
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index cd57704771..12d2a69973 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -1993,6 +1993,7 @@ void QQmlTypeData::done() compile(); scriptParser.clear(); + parsedQML.reset(); } void QQmlTypeData::completed() @@ -2033,8 +2034,9 @@ void QQmlTypeData::dataReceived(const Data &data) if (data.isFile()) preparseData = data.asFile()->metaData(QLatin1String("qml:preparse")); if (m_useNewCompiler) { + parsedQML.reset(new QtQml::ParsedQML); QQmlCodeGenerator compiler; - if (!compiler.generateFromQml(code, finalUrl(), finalUrlString(), &parsedQML)) { + if (!compiler.generateFromQml(code, finalUrl(), finalUrlString(), parsedQML.data())) { setError(compiler.errors); return; } @@ -2075,11 +2077,11 @@ void QQmlTypeData::dataReceived(const Data &data) // ### convert to use new data structure once old compiler is gone. QList<QQmlScript::Import> imports; if (m_useNewCompiler) { - imports.reserve(parsedQML.imports.size()); - foreach (QV4::CompiledData::Import *i, parsedQML.imports) { + imports.reserve(parsedQML->imports.size()); + foreach (QV4::CompiledData::Import *i, parsedQML->imports) { QQmlScript::Import import; - import.uri = parsedQML.stringAt(i->uriIndex); - import.qualifier = parsedQML.stringAt(i->qualifierIndex); + import.uri = parsedQML->stringAt(i->uriIndex); + import.qualifier = parsedQML->stringAt(i->qualifierIndex); import.majorVersion = i->majorVersion; import.minorVersion = i->minorVersion; import.location.start.line = i->location.line; @@ -2162,16 +2164,16 @@ void QQmlTypeData::compile() if (m_useNewCompiler) { JSCodeGen jsCodeGen; - jsCodeGen.generateJSCodeForFunctionsAndBindings(finalUrlString(), &parsedQML); + jsCodeGen.generateJSCodeForFunctionsAndBindings(finalUrlString(), parsedQML.data()); QV4::ExecutionEngine *v4 = QV8Engine::getV4(m_typeLoader->engine()); - QScopedPointer<QQmlJS::EvalInstructionSelection> isel(v4->iselFactory->create(v4->executableAllocator, &parsedQML.jsModule, &parsedQML.jsGenerator)); + QScopedPointer<QQmlJS::EvalInstructionSelection> isel(v4->iselFactory->create(v4->executableAllocator, &parsedQML->jsModule, &parsedQML->jsGenerator)); isel->setUseFastLookups(false); QV4::CompiledData::CompilationUnit *jsUnit = isel->compile(/*generated unit data*/false); QmlUnitGenerator qmlGenerator; - QV4::CompiledData::QmlUnit *qmlUnit = qmlGenerator.generate(parsedQML); + QV4::CompiledData::QmlUnit *qmlUnit = qmlGenerator.generate(*parsedQML.data()); if (jsUnit) { Q_ASSERT(!jsUnit->data); diff --git a/src/qml/qml/qqmltypeloader_p.h b/src/qml/qml/qqmltypeloader_p.h index 9e71bab7b0..3a3fa8f1d5 100644 --- a/src/qml/qml/qqmltypeloader_p.h +++ b/src/qml/qml/qqmltypeloader_p.h @@ -450,7 +450,7 @@ private: // --- old compiler QQmlScript::Parser scriptParser; // --- new compiler - QtQml::ParsedQML parsedQML; + QScopedPointer<QtQml::ParsedQML> parsedQML; // --- QList<ScriptReference> m_scripts; |