diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2018-07-23 09:42:16 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2018-07-31 17:08:00 +0000 |
commit | 9337b1c339c34cd4fe10d236be2ee61ca76e17ba (patch) | |
tree | 4fa5482063e447dc7d9988069cdeafd255e8933b | |
parent | 0a0e6e2ad2ed8224b5c1b6cd179677198e87288c (diff) |
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 <lars.knoll@qt.io>
-rw-r--r-- | src/qml/compiler/qqmlirbuilder.cpp | 6 | ||||
-rw-r--r-- | src/qml/compiler/qqmlpropertyvalidator_p.h | 2 | ||||
-rw-r--r-- | src/qml/compiler/qv4compileddata.cpp | 4 | ||||
-rw-r--r-- | src/qml/compiler/qv4compileddata_p.h | 8 | ||||
-rw-r--r-- | src/qml/qml/qqmlobjectcreator_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 2 | ||||
-rw-r--r-- | src/qml/types/qqmlconnections.cpp | 3 | ||||
-rw-r--r-- | src/qml/types/qqmllistmodel.cpp | 2 | ||||
-rw-r--r-- | src/quick/util/qquickpropertychanges.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp | 14 | ||||
-rw-r--r-- | tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp | 4 |
11 files changed, 24 insertions, 25 deletions
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<QQmlCompileError> recordError(const QV4::CompiledData::Location &location, const QString &description) const; Q_REQUIRED_RESULT QVector<QQmlCompileError> 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<QV4::CompiledData::CompilationUnit> 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<const quint32_le*>((reinterpret_cast<const char *>(this)) + offsetToStringTable); const quint32_le offset = offsetTable[idx]; const String *str = reinterpret_cast<const String*>(reinterpret_cast<const char *>(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<QQmlScriptBlob> &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<QV4::CompiledData: bool QQmlListModelParser::applyProperty(const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &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) { diff --git a/src/quick/util/qquickpropertychanges.cpp b/src/quick/util/qquickpropertychanges.cpp index df02b9f0c3..6635d0fb04 100644 --- a/src/quick/util/qquickpropertychanges.cpp +++ b/src/quick/util/qquickpropertychanges.cpp @@ -270,7 +270,7 @@ void QQuickPropertyChangesPrivate::decodeBinding(const QString &propertyPrefix, { Q_Q(QQuickPropertyChanges); - QString propertyName = propertyPrefix + qmlUnit->stringAt(binding->propertyNameIndex); + QString propertyName = propertyPrefix + compilationUnit->stringAt(binding->propertyNameIndex); if (binding->type == QV4::CompiledData::Binding::Type_GroupProperty || binding->type == QV4::CompiledData::Binding::Type_AttachedProperty) { diff --git a/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp b/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp index fa50997ae7..5c70aed256 100644 --- a/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp +++ b/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp @@ -282,7 +282,7 @@ void tst_qmldiskcache::regenerateAfterChange() QCOMPARE(quint32(testUnit->functionTableSize), quint32(1)); const QV4::CompiledData::Function *bindingFunction = testUnit->functionAt(0); - QCOMPARE(testUnit->stringAt(bindingFunction->nameIndex), QString("expression for blah")); // check if we have the correct function + QCOMPARE(testUnit->stringAtInternal(bindingFunction->nameIndex), QString("expression for blah")); // check if we have the correct function QVERIFY(bindingFunction->codeSize > 0); QVERIFY(bindingFunction->codeOffset < testUnit->unitSize); } @@ -308,7 +308,7 @@ void tst_qmldiskcache::regenerateAfterChange() QCOMPARE(quint32(testUnit->functionTableSize), quint32(1)); const QV4::CompiledData::Function *bindingFunction = testUnit->functionAt(0); - QCOMPARE(testUnit->stringAt(bindingFunction->nameIndex), QString("expression for blah")); // check if we have the correct function + QCOMPARE(testUnit->stringAtInternal(bindingFunction->nameIndex), QString("expression for blah")); // check if we have the correct function QVERIFY(bindingFunction->codeSize > 0); QVERIFY(bindingFunction->codeOffset < testUnit->unitSize); } @@ -332,12 +332,12 @@ void tst_qmldiskcache::registerImportForImplicitComponent() QVERIFY2(testUnit, qPrintable(testCompiler.lastErrorString)); QCOMPARE(quint32(testUnit->nImports), quint32(2)); - QCOMPARE(testUnit->stringAt(testUnit->importAt(0)->uriIndex), QStringLiteral("QtQuick")); + QCOMPARE(testUnit->stringAtInternal(testUnit->importAt(0)->uriIndex), QStringLiteral("QtQuick")); QQmlType componentType = QQmlMetaType::qmlType(&QQmlComponent::staticMetaObject); - QCOMPARE(testUnit->stringAt(testUnit->importAt(1)->uriIndex), QString(componentType.module())); - QCOMPARE(testUnit->stringAt(testUnit->importAt(1)->qualifierIndex), QStringLiteral("QmlInternals")); + QCOMPARE(testUnit->stringAtInternal(testUnit->importAt(1)->uriIndex), QString(componentType.module())); + QCOMPARE(testUnit->stringAtInternal(testUnit->importAt(1)->qualifierIndex), QStringLiteral("QmlInternals")); QCOMPARE(quint32(testUnit->nObjects), quint32(3)); @@ -346,7 +346,7 @@ void tst_qmldiskcache::registerImportForImplicitComponent() QCOMPARE(quint32(obj->bindingTable()->type), quint32(QV4::CompiledData::Binding::Type_Object)); const QV4::CompiledData::Object *implicitComponent = testUnit->objectAt(obj->bindingTable()->value.objectIndex); - QCOMPARE(testUnit->stringAt(implicitComponent->inheritedTypeNameIndex), QStringLiteral("QmlInternals.") + componentType.elementName()); + QCOMPARE(testUnit->stringAtInternal(implicitComponent->inheritedTypeNameIndex), QStringLiteral("QmlInternals.") + componentType.elementName()); } } @@ -498,7 +498,7 @@ void tst_qmldiskcache::recompileAfterDirectoryChange() const QV4::CompiledData::Unit *unit = testCompiler.mapUnit(); QVERIFY(unit->sourceFileIndex != 0); const QString expectedPath = QUrl::fromLocalFile(testCompiler.testFilePath).toString(); - QCOMPARE(unit->stringAt(unit->sourceFileIndex), expectedPath); + QCOMPARE(unit->stringAtInternal(unit->sourceFileIndex), expectedPath); testCompiler.closeMapping(); } diff --git a/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp b/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp index ace60d6c1f..e7fbf4a6f0 100644 --- a/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp +++ b/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp @@ -89,7 +89,7 @@ void tst_qqmltranslation::translation() const QV4::CompiledData::Object *rootObject = unit->objectAt(/*root object*/0); const QV4::CompiledData::Binding *binding = rootObject->bindingTable(); for (quint32 i = 0; i < rootObject->nBindings; ++i, ++binding) { - const QString propertyName = unit->stringAt(binding->propertyNameIndex); + const QString propertyName = compilationUnit->stringAt(binding->propertyNameIndex); const bool expectCompiledTranslation = compiledTranslations.contains(propertyName); @@ -144,7 +144,7 @@ void tst_qqmltranslation::idTranslation() const QV4::CompiledData::Object *rootObject = unit->objectAt(/*root object*/0); const QV4::CompiledData::Binding *binding = rootObject->bindingTable(); for (quint32 i = 0; i < rootObject->nBindings; ++i, ++binding) { - const QString propertyName = unit->stringAt(binding->propertyNameIndex); + const QString propertyName = compilationUnit->stringAt(binding->propertyNameIndex); if (propertyName == "idTranslation") { if (binding->type != QV4::CompiledData::Binding::Type_TranslationById) qDebug() << "binding for property" << propertyName << "is not a compiled translation"; |