From 9337b1c339c34cd4fe10d236be2ee61ca76e17ba Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 23 Jul 2018 09:42:16 +0200 Subject: Clean up compilation unit string resolution Replace use of CompiledData::Unit::stringAt with CompilationUnit::stringAt as central place, in preparation for allowing derived compilation units to retrieve strings from base units. Change-Id: Ifafe6c18a9fd8d1e2259a60c17200124869b4c2d Reviewed-by: Lars Knoll --- src/qml/compiler/qqmlirbuilder.cpp | 6 +++--- src/qml/compiler/qqmlpropertyvalidator_p.h | 2 +- src/qml/compiler/qv4compileddata.cpp | 4 ++-- src/qml/compiler/qv4compileddata_p.h | 8 ++++---- src/qml/qml/qqmlobjectcreator_p.h | 2 +- src/qml/qml/qqmltypeloader.cpp | 2 +- src/qml/types/qqmlconnections.cpp | 3 +-- src/qml/types/qqmllistmodel.cpp | 2 +- 8 files changed, 14 insertions(+), 15 deletions(-) (limited to 'src/qml') diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp index d5d7d6d6b0..88527b0d94 100644 --- a/src/qml/compiler/qqmlirbuilder.cpp +++ b/src/qml/compiler/qqmlirbuilder.cpp @@ -1776,7 +1776,7 @@ QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output, const QV4: qDebug() << " " << qmlUnit->stringTableSize << "strings"; quint32 totalStringSize = 0; for (quint32 i = 0; i < qmlUnit->stringTableSize; ++i) - totalStringSize += QV4::CompiledData::String::calculateSize(qmlUnit->stringAt(i)); + totalStringSize += QV4::CompiledData::String::calculateSize(qmlUnit->stringAtInternal(i)); qDebug() << " " << totalStringSize << "bytes total strings"; } @@ -2354,7 +2354,7 @@ void IRLoader::load() { output->jsGenerator.stringTable.clear(); for (uint i = 0; i < unit->stringTableSize; ++i) - output->jsGenerator.stringTable.registerString(unit->stringAt(i)); + output->jsGenerator.stringTable.registerString(unit->stringAtInternal(i)); for (quint32 i = 0; i < unit->nImports; ++i) output->imports << unit->importAt(i); @@ -2491,7 +2491,7 @@ QmlIR::Object *IRLoader::loadObject(const QV4::CompiledData::Object *serializedO f->location = compiledFunction->location; f->nameIndex = compiledFunction->nameIndex; - const QString name = unit->stringAt(compiledFunction->nameIndex); + const QString name = unit->stringAtInternal(compiledFunction->nameIndex); f->formals.allocate(pool, int(compiledFunction->nFormals)); const quint32_le *formalNameIdx = compiledFunction->formalsTable(); diff --git a/src/qml/compiler/qqmlpropertyvalidator_p.h b/src/qml/compiler/qqmlpropertyvalidator_p.h index a8f75a0a7e..67a2f989af 100644 --- a/src/qml/compiler/qqmlpropertyvalidator_p.h +++ b/src/qml/compiler/qqmlpropertyvalidator_p.h @@ -71,7 +71,7 @@ private: Q_REQUIRED_RESULT QVector recordError(const QV4::CompiledData::Location &location, const QString &description) const; Q_REQUIRED_RESULT QVector recordError(const QQmlCompileError &error) const; - QString stringAt(int index) const { return qmlUnit->stringAt(index); } + QString stringAt(int index) const { return compilationUnit->stringAt(index); } QQmlEnginePrivate *enginePrivate; QQmlRefPointer compilationUnit; diff --git a/src/qml/compiler/qv4compileddata.cpp b/src/qml/compiler/qv4compileddata.cpp index d9e58bb6e8..84abd081cf 100644 --- a/src/qml/compiler/qv4compileddata.cpp +++ b/src/qml/compiler/qv4compileddata.cpp @@ -130,7 +130,7 @@ QV4::Function *CompilationUnit::linkToEngine(ExecutionEngine *engine) // memset the strings to 0 in case a GC run happens while we're within the loop below memset(runtimeStrings, 0, data->stringTableSize * sizeof(QV4::Heap::String*)); for (uint i = 0; i < data->stringTableSize; ++i) - runtimeStrings[i] = engine->newString(data->stringAt(i)); + runtimeStrings[i] = engine->newString(stringAt(i)); runtimeRegularExpressions = new QV4::Value[data->regexpTableSize]; // memset the regexps to 0 in case a GC run happens while we're within the loop below @@ -146,7 +146,7 @@ QV4::Function *CompilationUnit::linkToEngine(ExecutionEngine *engine) ignoreCase = true; if (re->flags & CompiledData::RegExp::RegExp_Multiline) multiline = true; - runtimeRegularExpressions[i] = QV4::RegExp::create(engine, data->stringAt(re->stringIndex), ignoreCase, multiline, global); + runtimeRegularExpressions[i] = QV4::RegExp::create(engine, stringAt(re->stringIndex), ignoreCase, multiline, global); } if (data->lookupTableSize) { diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h index 715882c985..b3edf1c701 100644 --- a/src/qml/compiler/qv4compileddata_p.h +++ b/src/qml/compiler/qv4compileddata_p.h @@ -830,7 +830,7 @@ struct Unit } /* end QML specific fields*/ - QString stringAt(int idx) const { + QString stringAtInternal(int idx) const { const quint32_le *offsetTable = reinterpret_cast((reinterpret_cast(this)) + offsetToStringTable); const quint32_le offset = offsetTable[idx]; const String *str = reinterpret_cast(reinterpret_cast(this) + offset); @@ -1035,8 +1035,8 @@ public: // finalUrl() and finalUrlString() shall be used to resolve further URLs referred to in the code // They are _not_ intercepted and thus represent the "logical" name for the code. - QString fileName() const { return data->stringAt(data->sourceFileIndex); } - QString finalUrlString() const { return data->stringAt(data->finalUrlIndex); } + QString fileName() const { return stringAt(data->sourceFileIndex); } + QString finalUrlString() const { return stringAt(data->finalUrlIndex); } QUrl url() const { if (m_url.isNull) m_url = QUrl(fileName()); return m_url; } QUrl finalUrl() const { @@ -1088,7 +1088,7 @@ public: typedef Object CompiledObject; int objectCount() const { return data->nObjects; } const Object *objectAt(int index) const { return data->objectAt(index); } - QString stringAt(int index) const { return data->stringAt(index); } + QString stringAt(int index) const { return data->stringAtInternal(index); } struct FunctionIterator { diff --git a/src/qml/qml/qqmlobjectcreator_p.h b/src/qml/qml/qqmlobjectcreator_p.h index 435b213341..020e673941 100644 --- a/src/qml/qml/qqmlobjectcreator_p.h +++ b/src/qml/qml/qqmlobjectcreator_p.h @@ -118,7 +118,7 @@ private: void setPropertyValue(const QQmlPropertyData *property, const QV4::CompiledData::Binding *binding); void setupFunctions(); - QString stringAt(int idx) const { return qmlUnit->stringAt(idx); } + QString stringAt(int idx) const { return compilationUnit->stringAt(idx); } void recordError(const QV4::CompiledData::Location &location, const QString &description); void registerObjectWithContextById(const QV4::CompiledData::Object *object, QObject *instance) const; diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index 9fa6027945..b105165be7 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -3076,7 +3076,7 @@ void QQmlScriptBlob::done() QString QQmlScriptBlob::stringAt(int index) const { - return m_scriptData->m_precompiledScript->unitData()->stringAt(index); + return m_scriptData->m_precompiledScript->stringAt(index); } void QQmlScriptBlob::scriptImported(const QQmlRefPointer &blob, const QV4::CompiledData::Location &location, const QString &qualifier, const QString &nameSpace) diff --git a/src/qml/types/qqmlconnections.cpp b/src/qml/types/qqmlconnections.cpp index 75ed521108..f601087690 100644 --- a/src/qml/types/qqmlconnections.cpp +++ b/src/qml/types/qqmlconnections.cpp @@ -276,10 +276,9 @@ void QQmlConnections::connectSignals() QQmlData *ddata = QQmlData::get(this); QQmlContextData *ctxtdata = ddata ? ddata->outerContext : nullptr; - const QV4::CompiledData::Unit *qmlUnit = d->compilationUnit->unitData(); for (const QV4::CompiledData::Binding *binding : qAsConst(d->bindings)) { Q_ASSERT(binding->type == QV4::CompiledData::Binding::Type_Script); - QString propName = qmlUnit->stringAt(binding->propertyNameIndex); + QString propName = d->compilationUnit->stringAt(binding->propertyNameIndex); QQmlProperty prop(target, propName); if (prop.isValid() && (prop.type() & QQmlProperty::SignalProperty)) { diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp index e352aa9d6c..df06a22eab 100644 --- a/src/qml/types/qqmllistmodel.cpp +++ b/src/qml/types/qqmllistmodel.cpp @@ -2699,7 +2699,7 @@ bool QQmlListModelParser::verifyProperty(const QQmlRefPointer &compilationUnit, const QV4::CompiledData::Unit *qmlUnit, const QV4::CompiledData::Binding *binding, ListModel *model, int outterElementIndex) { - const QString elementName = qmlUnit->stringAt(binding->propertyNameIndex); + const QString elementName = compilationUnit->stringAt(binding->propertyNameIndex); bool roleSet = false; if (binding->type >= QV4::CompiledData::Binding::Type_Object) { -- cgit v1.2.3