aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-09-06 10:17:47 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-08 09:00:18 +0200
commit34b6914970958ace37a3654600637b6fd3d2435c (patch)
tree131024227fa9e20f6eb085b1fe003a6c8a6b1152 /src
parent5b456c8da4462f9e11fa4da78a9e6ea86423a1e8 (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.cpp18
-rw-r--r--src/qml/qml/qqmltypeloader_p.h2
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;