From bceff2291da4dcca895a1e468073cb0c36e0dbd3 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 3 May 2022 14:52:37 +0200 Subject: QML: Port QV4::CompiledData::Location to new special integer bitfield Task-number: QTBUG-99545 Change-Id: If0d6f893f2351a4146ddf125be4079b5e312f308 Reviewed-by: Fabian Kosmale Reviewed-by: Sami Shalayel (cherry picked from commit 893b6ae6e890a2b8fc842d9c9cc64b9b8f34e22f) --- .../qmldbg_debugger/qqmlenginedebugservice.cpp | 6 +-- .../qmltooling/qmldbg_preview/proxytranslator.cpp | 7 +-- .../qmldbg_preview/qqmldebugtranslationservice.cpp | 8 +-- src/qml/common/qv4compileddata_p.h | 44 +++++++++------ src/qml/compiler/qqmlirbuilder.cpp | 62 ++++++++-------------- src/qml/compiler/qv4compiler.cpp | 3 +- src/qml/compiler/qv4compilerscanfunctions.cpp | 5 +- src/qml/debugger/qqmlprofiler_p.h | 2 +- src/qml/jsruntime/qv4executablecompilationunit.cpp | 12 +++-- src/qml/jsruntime/qv4function.cpp | 3 +- src/qml/jsruntime/qv4profiling.cpp | 4 +- src/qml/qml/qqmlbinding.cpp | 4 +- src/qml/qml/qqmlcomponent.cpp | 6 ++- src/qml/qml/qqmlcustomparser.cpp | 4 +- src/qml/qml/qqmljavascriptexpression.cpp | 4 +- src/qml/qml/qqmlobjectcreator.cpp | 12 ++--- src/qml/qml/qqmlpropertycachecreator_p.h | 4 +- src/qml/qml/qqmlpropertyvalidator.cpp | 6 ++- src/qml/qml/qqmlscriptblob.cpp | 8 +-- src/qml/qml/qqmltypecompiler.cpp | 4 +- src/qml/qml/qqmltypedata.cpp | 40 +++++++------- src/qml/qml/qqmltypeloader.cpp | 4 +- src/qml/types/qqmlbind.cpp | 2 +- src/qmlcompiler/qqmljsfunctioninitializer.cpp | 4 +- src/qmlcompiler/qqmljstyperesolver.cpp | 2 +- src/qmltest/quicktest.cpp | 4 +- tools/qmltc/prototype/codegenerator.cpp | 10 ++-- tools/qmltc/prototype/qml2cppcontext.h | 2 +- tools/qmltc/prototype/typeresolver.cpp | 2 +- tools/qmltc/qmltccompiler.h | 2 +- 30 files changed, 143 insertions(+), 137 deletions(-) diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp index 3afda162e6..89baceeb36 100644 --- a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp @@ -808,9 +808,9 @@ bool QQmlEngineDebugServiceImpl::setMethodBody(int objectId, const QString &meth int lineNumber = 0; QV4::ScopedFunctionObject oldMethod(scope, vmeMetaObject->vmeMethod(prop->coreIndex())); - if (oldMethod && oldMethod->d()->function) { - lineNumber = oldMethod->d()->function->compiledFunction->location.line; - } + if (oldMethod && oldMethod->d()->function) + lineNumber = oldMethod->d()->function->compiledFunction->location.line(); + QV4::ScopedValue v(scope, QQmlJavaScriptExpression::evalFunction(contextData, object, jsfunction, contextData->urlString(), lineNumber)); vmeMetaObject->setVmeMethod(prop->coreIndex(), v); return true; diff --git a/src/plugins/qmltooling/qmldbg_preview/proxytranslator.cpp b/src/plugins/qmltooling/qmldbg_preview/proxytranslator.cpp index b9641066e1..ddf2df12ff 100644 --- a/src/plugins/qmltooling/qmldbg_preview/proxytranslator.cpp +++ b/src/plugins/qmltooling/qmldbg_preview/proxytranslator.cpp @@ -75,9 +75,10 @@ QString ProxyTranslator::originStringFromInformation(const TranslationBindingInf QQmlSourceLocation ProxyTranslator::sourceLocationFromInformation(const TranslationBindingInformation &translationBindingInformation) { - return QQmlSourceLocation(translationBindingInformation.compilationUnit->fileName(), - translationBindingInformation.compiledBinding->valueLocation.line, - translationBindingInformation.compiledBinding->valueLocation.column); + return QQmlSourceLocation( + translationBindingInformation.compilationUnit->fileName(), + translationBindingInformation.compiledBinding->valueLocation.line(), + translationBindingInformation.compiledBinding->valueLocation.column()); } diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp index c7e4d0e4e6..8107b8a535 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp +++ b/src/plugins/qmltooling/qmldbg_preview/qqmldebugtranslationservice.cpp @@ -72,8 +72,8 @@ QDebug operator<<(QDebug debug, const TranslationBindingInformation &translation { QQmlError error; error.setUrl(translationBindingInformation.compilationUnit->url()); - error.setLine(translationBindingInformation.compiledBinding->valueLocation.line); - error.setColumn(translationBindingInformation.compiledBinding->valueLocation.column); + error.setLine(translationBindingInformation.compiledBinding->valueLocation.line()); + error.setColumn(translationBindingInformation.compiledBinding->valueLocation.column()); error.setDescription( QString(QLatin1String( "QDebug translation binding" @@ -299,8 +299,8 @@ private: { CodeMarker c; c.url = information.compilationUnit->url(); - c.line = information.compiledBinding->valueLocation.line; - c.column = information.compiledBinding->valueLocation.column; + c.line = information.compiledBinding->valueLocation.line(); + c.column = information.compiledBinding->valueLocation.column(); return c; } QString currentStateName; diff --git a/src/qml/common/qv4compileddata_p.h b/src/qml/common/qv4compileddata_p.h index 0ce4532cab..b14e523ab2 100644 --- a/src/qml/common/qv4compileddata_p.h +++ b/src/qml/common/qv4compileddata_p.h @@ -128,33 +128,45 @@ struct TableIterator struct Location { - union { - quint32 _dummy; - quint32_le_bitfield<0, 20> line; - quint32_le_bitfield<20, 12> column; - }; - - Location() : _dummy(0) { } + Location() : m_data(QSpecialIntegerBitfieldZero) {} Location(quint32 l, quint32 c) - : Location() { - line = l; - column = c; - Q_ASSERT(line == l); - Q_ASSERT(column == c); + m_data.set(l); + m_data.set(c); + Q_ASSERT(m_data.get() == l); + Q_ASSERT(m_data.get() == c); } inline bool operator<(const Location &other) const { - return line < other.line || - (line == other.line && column < other.column); + return m_data.get() < other.m_data.get() + || (m_data.get() == other.m_data.get() + && m_data.get() < other.m_data.get()); } friend size_t qHash(const Location &location, size_t seed = 0) { - return QT_PREPEND_NAMESPACE(qHash)(location._dummy, seed); + return QT_PREPEND_NAMESPACE(qHash)(location.m_data.data(), seed); + } + + friend bool operator==(const Location &a, const Location &b) + { + return a.m_data.data()== b.m_data.data(); } - friend bool operator==(const Location &a, const Location &b) { return a._dummy == b._dummy; } + void set(quint32 line, quint32 column) + { + m_data.set(line); + m_data.set(column); + } + + quint32 line() const { return m_data.get(); } + quint32 column() const { return m_data.get(); } + +private: + using LineField = quint32_le_bitfield_member<0, 20>; + using ColumnField = quint32_le_bitfield_member<20, 12>; + + quint32_le_bitfield_union m_data; }; static_assert(sizeof(Location) == 4, "Location structure needs to have the expected size to be binary compatible on disk when generated by host compiler and loaded by target"); diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp index 5ab7ffd3ff..6d9084c74c 100644 --- a/src/qml/compiler/qqmlirbuilder.cpp +++ b/src/qml/compiler/qqmlirbuilder.cpp @@ -170,7 +170,7 @@ QV4::CompiledData::BuiltinType Parameter::stringToBuiltinType(const QString &typ void Object::init(QQmlJS::MemoryPool *pool, int typeNameIndex, int idIndex, const QV4::CompiledData::Location &loc) { - Q_ASSERT(loc.line > 0 && loc.column > 0); + Q_ASSERT(loc.line() > 0 && loc.column() > 0); inheritedTypeNameIndex = typeNameIndex; location = loc; idNameIndex = idIndex; @@ -195,8 +195,8 @@ QString IRBuilder::sanityCheckFunctionNames(Object *obj, const QSet &il QSet functionNames; for (auto functionit = obj->functionsBegin(); functionit != obj->functionsEnd(); ++functionit) { Function *f = functionit.ptr; - errorLocation->startLine = f->location.line; - errorLocation->startColumn = f->location.column; + errorLocation->startLine = f->location.line(); + errorLocation->startColumn = f->location.column(); if (functionNames.contains(f->nameIndex)) return tr("Duplicate method name"); functionNames.insert(f->nameIndex); @@ -409,8 +409,7 @@ void ScriptDirectivesCollector::importFile(const QString &jsfile, const QString import->type = QV4::CompiledData::Import::ImportScript; import->uriIndex = jsGenerator->registerString(jsfile); import->qualifierIndex = jsGenerator->registerString(module); - import->location.line = lineNumber; - import->location.column = column; + import->location.set(lineNumber, column); document->imports << import; } @@ -421,8 +420,7 @@ void ScriptDirectivesCollector::importModule(const QString &uri, const QString & import->uriIndex = jsGenerator->registerString(uri); import->version = IRBuilder::extractVersion(QStringView(version)); import->qualifierIndex = jsGenerator->registerString(module); - import->location.line = lineNumber; - import->location.column = column; + import->location.set(lineNumber, column); document->imports << import; } @@ -606,8 +604,7 @@ bool IRBuilder::visit(QQmlJS::AST::UiInlineComponent *ast) inlineComponent->nameIndex = registerString(ast->name.toString()); inlineComponent->objectIndex = idx; auto location = ast->firstSourceLocation(); - inlineComponent->location.line = location.startLine; - inlineComponent->location.column = location.startColumn; + inlineComponent->location.set(location.startLine, location.startColumn); _object->appendInlineComponent(inlineComponent); return false; } @@ -803,8 +800,7 @@ bool IRBuilder::visit(QQmlJS::AST::UiImport *node) import->version = QTypeRevision(); } - import->location.line = node->importToken.startLine; - import->location.column = node->importToken.startColumn; + import->location.set(node->importToken.startLine, node->importToken.startColumn); import->uriIndex = registerString(uri); @@ -857,8 +853,7 @@ bool IRBuilder::visit(QQmlJS::AST::UiPragma *node) return false; } - pragma->location.line = node->pragmaToken.startLine; - pragma->location.column = node->pragmaToken.startColumn; + pragma->location.set(node->pragmaToken.startLine, node->pragmaToken.startColumn); _pragmas.append(pragma); return false; @@ -891,8 +886,7 @@ bool IRBuilder::visit(QQmlJS::AST::UiEnumDeclaration *node) if (enumName.at(0).isLower()) COMPILE_EXCEPTION(node->enumToken, tr("Scoped enum names must begin with an upper case letter")); - enumeration->location.line = node->enumToken.startLine; - enumeration->location.column = node->enumToken.startColumn; + enumeration->location.set(node->enumToken.startLine, node->enumToken.startColumn); enumeration->enumValues = New>(); @@ -911,8 +905,7 @@ bool IRBuilder::visit(QQmlJS::AST::UiEnumDeclaration *node) COMPILE_EXCEPTION(e->valueToken, tr("Enum value out of range")); enumValue->value = e->value; - enumValue->location.line = e->memberToken.startLine; - enumValue->location.column = e->memberToken.startColumn; + enumValue->location.set(e->memberToken.startLine, e->memberToken.startColumn); enumeration->enumValues->append(enumValue); e = e->next; @@ -936,8 +929,7 @@ bool IRBuilder::visit(QQmlJS::AST::UiPublicMember *node) signal->nameIndex = registerString(signalName); QQmlJS::SourceLocation loc = node->typeToken; - signal->location.line = loc.startLine; - signal->location.column = loc.startColumn; + signal->location.set(loc.startLine, loc.startColumn); signal->parameters = New >(); @@ -1019,8 +1011,7 @@ bool IRBuilder::visit(QQmlJS::AST::UiPublicMember *node) property->nameIndex = registerString(propName); QQmlJS::SourceLocation loc = node->firstSourceLocation(); - property->location.line = loc.startLine; - property->location.column = loc.startColumn; + property->location.set(loc.startLine, loc.startColumn); QQmlJS::SourceLocation errorLocation; QString error; @@ -1064,8 +1055,7 @@ bool IRBuilder::visit(QQmlJS::AST::UiSourceElement *node) Function *f = New(); QQmlJS::SourceLocation loc = funDecl->identifierToken; - f->location.line = loc.startLine; - f->location.column = loc.startColumn; + f->location.set(loc.startLine, loc.startColumn); f->index = index; f->nameIndex = registerString(funDecl->name.toString()); @@ -1138,8 +1128,7 @@ QStringView IRBuilder::textRefAt(const QQmlJS::SourceLocation &first, const QQml void IRBuilder::setBindingValue(QV4::CompiledData::Binding *binding, QQmlJS::AST::Statement *statement, QQmlJS::AST::Node *parentNode) { QQmlJS::SourceLocation loc = statement->firstSourceLocation(); - binding->valueLocation.line = loc.startLine; - binding->valueLocation.column = loc.startColumn; + binding->valueLocation.set(loc.startLine, loc.startColumn); binding->setType(QV4::CompiledData::Binding::Type_Invalid); if (_propertyDeclaration && _propertyDeclaration->isReadOnly()) binding->setFlag(QV4::CompiledData::Binding::InitializerForReadOnlyDeclaration); @@ -1256,8 +1245,7 @@ void IRBuilder::appendBinding(const QQmlJS::SourceLocation &qualifiedNameLocatio Binding *binding = New(); binding->propertyNameIndex = propertyNameIndex; binding->offset = nameLocation.offset; - binding->location.line = nameLocation.startLine; - binding->location.column = nameLocation.startColumn; + binding->location.set(nameLocation.startLine, nameLocation.startColumn); binding->clearFlags(); setBindingValue(binding, value, parentNode); QString error = bindingsTarget()->appendBinding(binding, /*isListBinding*/false); @@ -1276,8 +1264,7 @@ void IRBuilder::appendBinding(const QQmlJS::SourceLocation &qualifiedNameLocatio Binding *binding = New(); binding->propertyNameIndex = propertyNameIndex; binding->offset = nameLocation.offset; - binding->location.line = nameLocation.startLine; - binding->location.column = nameLocation.startColumn; + binding->location.set(nameLocation.startLine, nameLocation.startColumn); const Object *obj = _objects.at(objectIndex); binding->valueLocation = obj->location; @@ -1316,8 +1303,7 @@ bool IRBuilder::appendAlias(QQmlJS::AST::UiPublicMember *node) alias->setNameIndex(registerString(propName)); QQmlJS::SourceLocation loc = node->firstSourceLocation(); - alias->location.line = loc.startLine; - alias->location.column = loc.startColumn; + alias->location.set(loc.startLine, loc.startColumn); alias->propertyNameIndex = emptyStringIndex; @@ -1331,8 +1317,7 @@ bool IRBuilder::appendAlias(QQmlJS::AST::UiPublicMember *node) rhsLoc = node->statement->firstSourceLocation(); else rhsLoc = node->semicolonToken; - alias->referenceLocation.line = rhsLoc.startLine; - alias->referenceLocation.column = rhsLoc.startColumn; + alias->referenceLocation.set(rhsLoc.startLine, rhsLoc.startColumn); QStringList aliasReference; @@ -1427,8 +1412,7 @@ bool IRBuilder::setId(const QQmlJS::SourceLocation &idLocation, QQmlJS::AST::Sta COMPILE_EXCEPTION(idLocation, tr("Property value set multiple times")); _object->idNameIndex = registerString(idQString); - _object->locationOfIdProperty.line = idLocation.startLine; - _object->locationOfIdProperty.column = idLocation.startColumn; + _object->locationOfIdProperty.set(idLocation.startLine, idLocation.startColumn); return true; } @@ -1474,10 +1458,10 @@ bool IRBuilder::resolveQualifiedId(QQmlJS::AST::UiQualifiedId **nameToResolve, O binding = New(); binding->propertyNameIndex = propertyNameIndex; binding->offset = qualifiedIdElement->identifierToken.offset; - binding->location.line = qualifiedIdElement->identifierToken.startLine; - binding->location.column = qualifiedIdElement->identifierToken.startColumn; - binding->valueLocation.line = qualifiedIdElement->next->identifierToken.startLine; - binding->valueLocation.column = qualifiedIdElement->next->identifierToken.startColumn; + binding->location.set(qualifiedIdElement->identifierToken.startLine, + qualifiedIdElement->identifierToken.startColumn); + binding->valueLocation.set(qualifiedIdElement->next->identifierToken.startLine, + qualifiedIdElement->next->identifierToken.startColumn); binding->clearFlags(); if (onAssignment) diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp index 7d422955e3..8e53485c32 100644 --- a/src/qml/compiler/qv4compiler.cpp +++ b/src/qml/compiler/qv4compiler.cpp @@ -458,8 +458,7 @@ void QV4::Compiler::JSUnitGenerator::writeFunction(char *f, QV4::Compiler::Conte currentOffset += function->nLabelInfos * sizeof(quint32); } - function->location.line = irFunction->line; - function->location.column = irFunction->column; + function->location.set(irFunction->line, irFunction->column); function->codeOffset = currentOffset; function->codeSize = irFunction->code.size(); diff --git a/src/qml/compiler/qv4compilerscanfunctions.cpp b/src/qml/compiler/qv4compilerscanfunctions.cpp index ee259b968b..7a558478dd 100644 --- a/src/qml/compiler/qv4compilerscanfunctions.cpp +++ b/src/qml/compiler/qv4compilerscanfunctions.cpp @@ -57,10 +57,7 @@ using namespace QQmlJS::AST; static CompiledData::Location location(const QQmlJS::SourceLocation &astLocation) { - CompiledData::Location target; - target.line = astLocation.startLine; - target.column = astLocation.startColumn; - return target; + return CompiledData::Location(astLocation.startLine, astLocation.startColumn); } diff --git a/src/qml/debugger/qqmlprofiler_p.h b/src/qml/debugger/qqmlprofiler_p.h index eff8877e00..cd3bcef42f 100644 --- a/src/qml/debugger/qqmlprofiler_p.h +++ b/src/qml/debugger/qqmlprofiler_p.h @@ -178,7 +178,7 @@ public: RefLocation(QV4::ExecutableCompilationUnit *ref, const QUrl &url, const QV4::CompiledData::Object *obj, const QString &type) - : Location(QQmlSourceLocation(type, obj->location.line, obj->location.column), url), + : Location(QQmlSourceLocation(type, obj->location.line(), obj->location.column()), url), locationType(Creating), sent(false) { unit = ref; diff --git a/src/qml/jsruntime/qv4executablecompilationunit.cpp b/src/qml/jsruntime/qv4executablecompilationunit.cpp index ab5cd9363f..7ca2e3e23e 100644 --- a/src/qml/jsruntime/qv4executablecompilationunit.cpp +++ b/src/qml/jsruntime/qv4executablecompilationunit.cpp @@ -623,7 +623,9 @@ Heap::Module *ExecutableCompilationUnit::instantiate(ExecutionEngine *engine) referenceErrorMessage += QStringLiteral(" because "); referenceErrorMessage += url.toString(QUrl::RemoveFragment); referenceErrorMessage += QStringLiteral(" is not an object"); - engine->throwReferenceError(referenceErrorMessage, fileName(), entry.location.line, entry.location.column); + engine->throwReferenceError( + referenceErrorMessage, fileName(), + entry.location.line(), entry.location.column()); return nullptr; } @@ -642,7 +644,9 @@ Heap::Module *ExecutableCompilationUnit::instantiate(ExecutionEngine *engine) if (!valuePtr) { QString referenceErrorMessage = QStringLiteral("Unable to resolve import reference "); referenceErrorMessage += importName->toQString(); - engine->throwReferenceError(referenceErrorMessage, fileName(), entry.location.line, entry.location.column); + engine->throwReferenceError( + referenceErrorMessage, fileName(), + entry.location.line(), entry.location.column()); return nullptr; } imports[i] = valuePtr; @@ -659,7 +663,9 @@ Heap::Module *ExecutableCompilationUnit::instantiate(ExecutionEngine *engine) if (!dependentModuleUnit->resolveExport(importName)) { QString referenceErrorMessage = QStringLiteral("Unable to resolve re-export reference "); referenceErrorMessage += importName->toQString(); - engine->throwReferenceError(referenceErrorMessage, fileName(), entry.location.line, entry.location.column); + engine->throwReferenceError( + referenceErrorMessage, fileName(), + entry.location.line(), entry.location.column()); return nullptr; } } diff --git a/src/qml/jsruntime/qv4function.cpp b/src/qml/jsruntime/qv4function.cpp index 95a7506c80..715c903e10 100644 --- a/src/qml/jsruntime/qv4function.cpp +++ b/src/qml/jsruntime/qv4function.cpp @@ -206,7 +206,8 @@ QString Function::prettyName(const Function *function, const void *code) QQmlSourceLocation Function::sourceLocation() const { - return QQmlSourceLocation(sourceFile(), compiledFunction->location.line, compiledFunction->location.column); + return QQmlSourceLocation( + sourceFile(), compiledFunction->location.line(), compiledFunction->location.column()); } QT_END_NAMESPACE diff --git a/src/qml/jsruntime/qv4profiling.cpp b/src/qml/jsruntime/qv4profiling.cpp index 26e1074fe3..1f518966d6 100644 --- a/src/qml/jsruntime/qv4profiling.cpp +++ b/src/qml/jsruntime/qv4profiling.cpp @@ -50,8 +50,8 @@ FunctionLocation FunctionCall::resolveLocation() const { return FunctionLocation(m_function->name()->toQString(), m_function->executableCompilationUnit()->fileName(), - m_function->compiledFunction->location.line, - m_function->compiledFunction->location.column); + m_function->compiledFunction->location.line(), + m_function->compiledFunction->location.column()); } FunctionCallProperties FunctionCall::properties() const diff --git a/src/qml/qml/qqmlbinding.cpp b/src/qml/qml/qqmlbinding.cpp index 5733abcad0..98fddc4156 100644 --- a/src/qml/qml/qqmlbinding.cpp +++ b/src/qml/qml/qqmlbinding.cpp @@ -406,7 +406,9 @@ public: QQmlSourceLocation sourceLocation() const override final { - return QQmlSourceLocation(m_compilationUnit->fileName(), m_binding->valueLocation.line, m_binding->valueLocation.column); + return QQmlSourceLocation( + m_compilationUnit->fileName(), m_binding->valueLocation.line(), + m_binding->valueLocation.column()); } static void onLanguageChange(QPropertyObserver *observer, QUntypedPropertyData *) diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp index 80f57b8c4d..addee70b6b 100644 --- a/src/qml/qml/qqmlcomponent.cpp +++ b/src/qml/qml/qqmlcomponent.cpp @@ -1484,8 +1484,10 @@ QQmlError QQmlComponentPrivate::unsetRequiredPropertyToQQmlError(const RequiredP } error.setDescription(description); error.setUrl(unsetRequiredProperty.fileUrl); - error.setLine(qmlConvertSourceCoordinate(unsetRequiredProperty.location.line)); - error.setColumn(qmlConvertSourceCoordinate(unsetRequiredProperty.location.column)); + error.setLine(qmlConvertSourceCoordinate( + unsetRequiredProperty.location.line())); + error.setColumn(qmlConvertSourceCoordinate( + unsetRequiredProperty.location.column())); return error; } diff --git a/src/qml/qml/qqmlcustomparser.cpp b/src/qml/qml/qqmlcustomparser.cpp index b0df4f26dc..62bcaa41c6 100644 --- a/src/qml/qml/qqmlcustomparser.cpp +++ b/src/qml/qml/qqmlcustomparser.cpp @@ -102,8 +102,8 @@ void QQmlCustomParser::clearErrors() void QQmlCustomParser::error(const QV4::CompiledData::Location &location, const QString &description) { QQmlError error; - error.setLine(qmlConvertSourceCoordinate(location.line)); - error.setColumn(qmlConvertSourceCoordinate(location.column)); + error.setLine(qmlConvertSourceCoordinate(location.line())); + error.setColumn(qmlConvertSourceCoordinate(location.column())); error.setDescription(description); exceptions << error; diff --git a/src/qml/qml/qqmljavascriptexpression.cpp b/src/qml/qml/qqmljavascriptexpression.cpp index 732ab0e9f3..57b1f19590 100644 --- a/src/qml/qml/qqmljavascriptexpression.cpp +++ b/src/qml/qml/qqmljavascriptexpression.cpp @@ -129,8 +129,8 @@ QString QQmlJavaScriptExpression::expressionIdentifier() const { if (auto f = function()) { QString url = f->sourceFile(); - uint lineNumber = f->compiledFunction->location.line; - uint columnNumber = f->compiledFunction->location.column; + uint lineNumber = f->compiledFunction->location.line(); + uint columnNumber = f->compiledFunction->location.column(); return url + QString::asprintf(":%u:%u", lineNumber, columnNumber); } diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 5ced4bcbd5..a59bca68e0 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -784,8 +784,8 @@ bool QQmlObjectCreator::setPropertyBinding(const QQmlPropertyData *bindingProper QQmlScriptString ss(compilationUnit->bindingValueAsScriptString(binding), context->asQQmlContext(), _scopeObject); ss.d.data()->bindingId = bindingType == QV4::CompiledData::Binding::Type_Script ? binding->value.compiledScriptIndex : (quint32)QQmlBinding::Invalid; - ss.d.data()->lineNumber = binding->location.line; - ss.d.data()->columnNumber = binding->location.column; + ss.d.data()->lineNumber = binding->location.line(); + ss.d.data()->columnNumber = binding->location.column(); ss.d.data()->isStringLiteral = bindingType == QV4::CompiledData::Binding::Type_String; ss.d.data()->isNumberLiteral = bindingType == QV4::CompiledData::Binding::Type_Number; ss.d.data()->numberValue = compilationUnit->bindingValueAsNumber(binding); @@ -1162,8 +1162,8 @@ void QQmlObjectCreator::recordError(const QV4::CompiledData::Location &location, { QQmlError error; error.setUrl(compilationUnit->url()); - error.setLine(qmlConvertSourceCoordinate(location.line)); - error.setColumn(qmlConvertSourceCoordinate(location.column)); + error.setLine(qmlConvertSourceCoordinate(location.line())); + error.setColumn(qmlConvertSourceCoordinate(location.column())); error.setDescription(description); errors << error; } @@ -1285,8 +1285,8 @@ QObject *QQmlObjectCreator::createInstance(int index, QObject *parent, bool isCo compilationUnit.data(), obj, typeName, context->url())); Q_UNUSED(typeName); // only relevant for tracing - ddata->lineNumber = obj->location.line; - ddata->columnNumber = obj->location.column; + ddata->lineNumber = obj->location.line(); + ddata->columnNumber = obj->location.column(); ddata->setImplicitDestructible(); // inline components are root objects, but their index is != 0, so we need diff --git a/src/qml/qml/qqmlpropertycachecreator_p.h b/src/qml/qml/qqmlpropertycachecreator_p.h index 7f4fae95aa..606628cbe8 100644 --- a/src/qml/qml/qqmlpropertycachecreator_p.h +++ b/src/qml/qml/qqmlpropertycachecreator_p.h @@ -67,8 +67,8 @@ inline QQmlError qQmlCompileError(const QV4::CompiledData::Location &location, const QString &description) { QQmlError error; - error.setLine(qmlConvertSourceCoordinate(location.line)); - error.setColumn(qmlConvertSourceCoordinate(location.column)); + error.setLine(qmlConvertSourceCoordinate(location.line())); + error.setColumn(qmlConvertSourceCoordinate(location.column())); error.setDescription(description); return error; } diff --git a/src/qml/qml/qqmlpropertyvalidator.cpp b/src/qml/qml/qqmlpropertyvalidator.cpp index 1f6c0e0739..f430777dac 100644 --- a/src/qml/qml/qqmlpropertyvalidator.cpp +++ b/src/qml/qml/qqmlpropertyvalidator.cpp @@ -415,8 +415,10 @@ QQmlError QQmlPropertyValidator::validateLiteralBinding( if (binding->type() == QV4::CompiledData::Binding::Type_Null) { QQmlError warning; warning.setUrl(compilationUnit->url()); - warning.setLine(qmlConvertSourceCoordinate(binding->valueLocation.line)); - warning.setColumn(qmlConvertSourceCoordinate(binding->valueLocation.column)); + warning.setLine(qmlConvertSourceCoordinate( + binding->valueLocation.line())); + warning.setColumn(qmlConvertSourceCoordinate( + binding->valueLocation.column())); warning.setDescription(error + tr(" - Assigning null to incompatible properties in QML " "is deprecated. This will become a compile error in " "future versions of Qt.")); diff --git a/src/qml/qml/qqmlscriptblob.cpp b/src/qml/qml/qqmlscriptblob.cpp index 7b7a842d04..9e2b02162f 100644 --- a/src/qml/qml/qqmlscriptblob.cpp +++ b/src/qml/qml/qqmlscriptblob.cpp @@ -169,8 +169,8 @@ void QQmlScriptBlob::done() QList errors = script.script->errors(); QQmlError error; error.setUrl(url()); - error.setLine(qmlConvertSourceCoordinate(script.location.line)); - error.setColumn(qmlConvertSourceCoordinate(script.location.column)); + error.setLine(qmlConvertSourceCoordinate(script.location.line())); + error.setColumn(qmlConvertSourceCoordinate(script.location.column())); error.setDescription(QQmlTypeLoader::tr("Script %1 unavailable").arg(script.script->urlString())); errors.prepend(error); setError(errors); @@ -238,8 +238,8 @@ void QQmlScriptBlob::initializeFromCompilationUnit(const QQmlRefPointerlocation.line); - error.setColumn(import->location.column); + error.setLine(import->location.line()); + error.setColumn(import->location.column()); errors.prepend(error); // put it back on the list after filling out information. setError(errors); return; diff --git a/src/qml/qml/qqmltypecompiler.cpp b/src/qml/qml/qqmltypecompiler.cpp index b633f2fb6f..e54d68ee02 100644 --- a/src/qml/qml/qqmltypecompiler.cpp +++ b/src/qml/qml/qqmltypecompiler.cpp @@ -180,8 +180,8 @@ QQmlRefPointer QQmlTypeCompiler::compile() void QQmlTypeCompiler::recordError(const QV4::CompiledData::Location &location, const QString &description) { QQmlError error; - error.setLine(qmlConvertSourceCoordinate(location.line)); - error.setColumn(qmlConvertSourceCoordinate(location.column)); + error.setLine(qmlConvertSourceCoordinate(location.line())); + error.setColumn(qmlConvertSourceCoordinate(location.column())); error.setDescription(description); error.setUrl(url()); errors << error; diff --git a/src/qml/qml/qqmltypedata.cpp b/src/qml/qml/qqmltypedata.cpp index 51564e2429..b9847ce026 100644 --- a/src/qml/qml/qqmltypedata.cpp +++ b/src/qml/qml/qqmltypedata.cpp @@ -203,8 +203,8 @@ bool QQmlTypeData::tryLoadFromDiskCache() Q_ASSERT(errors.size()); QQmlError error(errors.takeFirst()); error.setUrl(m_importCache.baseUrl()); - error.setLine(qmlConvertSourceCoordinate(import->location.line)); - error.setColumn(qmlConvertSourceCoordinate(import->location.column)); + error.setLine(qmlConvertSourceCoordinate(import->location.line())); + error.setColumn(qmlConvertSourceCoordinate(import->location.column())); errors.prepend(error); // put it back on the list after filling out information. setError(errors); return false; @@ -331,8 +331,8 @@ void QQmlTypeData::done() QList errors = script.script->errors(); QQmlError error; error.setUrl(url()); - error.setLine(qmlConvertSourceCoordinate(script.location.line)); - error.setColumn(qmlConvertSourceCoordinate(script.location.column)); + error.setLine(qmlConvertSourceCoordinate(script.location.line())); + error.setColumn(qmlConvertSourceCoordinate(script.location.column())); error.setDescription(QQmlTypeLoader::tr("Script %1 unavailable").arg(script.script->urlString())); errors.prepend(error); setError(errors); @@ -355,8 +355,8 @@ void QQmlTypeData::done() QList errors = type.typeData ? type.typeData->errors() : QList{}; QQmlError error; error.setUrl(url()); - error.setLine(qmlConvertSourceCoordinate(type.location.line)); - error.setColumn(qmlConvertSourceCoordinate(type.location.column)); + error.setLine(qmlConvertSourceCoordinate(type.location.line())); + error.setColumn(qmlConvertSourceCoordinate(type.location.column())); error.setDescription(QQmlTypeLoader::tr("Type %1 has no inline component type called %2").arg(QStringView{typeName}.left(lastDot), type.type.pendingResolutionName())); errors.prepend(error); setError(errors); @@ -371,8 +371,8 @@ void QQmlTypeData::done() QList errors = type.typeData->errors(); QQmlError error; error.setUrl(url()); - error.setLine(qmlConvertSourceCoordinate(type.location.line)); - error.setColumn(qmlConvertSourceCoordinate(type.location.column)); + error.setLine(qmlConvertSourceCoordinate(type.location.line())); + error.setColumn(qmlConvertSourceCoordinate(type.location.column())); error.setDescription(QQmlTypeLoader::tr("Type %1 unavailable").arg(typeName)); errors.prepend(error); setError(errors); @@ -390,8 +390,8 @@ void QQmlTypeData::done() QList errors = type.typeData->errors(); QQmlError error; error.setUrl(url()); - error.setLine(qmlConvertSourceCoordinate(type.location.line)); - error.setColumn(qmlConvertSourceCoordinate(type.location.column)); + error.setLine(qmlConvertSourceCoordinate(type.location.line())); + error.setColumn(qmlConvertSourceCoordinate(type.location.column())); error.setDescription(QQmlTypeLoader::tr("Type %1 unavailable").arg(typeName)); errors.prepend(error); setError(errors); @@ -698,8 +698,8 @@ void QQmlTypeData::continueLoadFromIR() // resource file system. QQmlError error = errors.first(); error.setUrl(m_importCache.baseUrl()); - error.setLine(qmlConvertSourceCoordinate(import->location.line)); - error.setColumn(qmlConvertSourceCoordinate(import->location.column)); + error.setLine(qmlConvertSourceCoordinate(import->location.line())); + error.setColumn(qmlConvertSourceCoordinate(import->location.column())); setError(error); return; } @@ -724,8 +724,10 @@ void QQmlTypeData::allDependenciesDone() QQmlError error; error.setDescription(QQmlTypeLoader::tr("module \"%1\" is not installed").arg(import->uri)); error.setUrl(m_importCache.baseUrl()); - error.setLine(qmlConvertSourceCoordinate(import->location.line)); - error.setColumn(qmlConvertSourceCoordinate(import->location.column)); + error.setLine(qmlConvertSourceCoordinate( + import->location.line())); + error.setColumn(qmlConvertSourceCoordinate( + import->location.column())); errors.prepend(error); } } @@ -855,8 +857,8 @@ void QQmlTypeData::resolveTypes() bool *selfReferenceDetection = unresolvedRef->needsCreation ? nullptr : &ref.selfReference; - if (!resolveType(name, version, ref, unresolvedRef->location.line, - unresolvedRef->location.column, reportErrors, + if (!resolveType(name, version, ref, unresolvedRef->location.line(), + unresolvedRef->location.column(), reportErrors, QQmlType::AnyRegistrationType, selfReferenceDetection) && reportErrors) return; @@ -875,11 +877,9 @@ void QQmlTypeData::resolveTypes() } } } - ref.version = version; - - ref.location.line = unresolvedRef->location.line; - ref.location.column = unresolvedRef->location.column; + ref.version = version; + ref.location = unresolvedRef->location; ref.needsCreation = unresolvedRef->needsCreation; m_resolvedTypes.insert(unresolvedRef.key(), ref); } diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index b41f15a7c2..9418a0cc28 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -745,8 +745,8 @@ void QQmlTypeLoader::Blob::dependencyComplete(QQmlDataBlob *blob) QQmlError error(errors.takeFirst()); error.setUrl(m_importCache.baseUrl()); const QV4::CompiledData::Location importLocation = data->importLocation(this); - error.setLine(qmlConvertSourceCoordinate(importLocation.line)); - error.setColumn(qmlConvertSourceCoordinate(importLocation.column)); + error.setLine(qmlConvertSourceCoordinate(importLocation.line())); + error.setColumn(qmlConvertSourceCoordinate(importLocation.column())); errors.prepend(error); // put it back on the list after filling out information. setError(errors); } diff --git a/src/qml/types/qqmlbind.cpp b/src/qml/types/qqmlbind.cpp index 582c833a52..b7d94093b4 100644 --- a/src/qml/types/qqmlbind.cpp +++ b/src/qml/types/qqmlbind.cpp @@ -740,7 +740,7 @@ static QQmlAnyBinding createBinding( if (id == QQmlBinding::Invalid) { return QQmlAnyBinding::createFromCodeString( prop, compilationUnit->bindingValueAsString(binding), scopeObject, - contextData, compilationUnit->finalUrlString(), binding->location.line); + contextData, compilationUnit->finalUrlString(), binding->location.line()); } QV4::Scope scope(contextData->engine()->handle()); QV4::Scoped qmlCtxt( diff --git a/src/qmlcompiler/qqmljsfunctioninitializer.cpp b/src/qmlcompiler/qqmljsfunctioninitializer.cpp index dfc8d9632a..cbaa9fbb0d 100644 --- a/src/qmlcompiler/qqmljsfunctioninitializer.cpp +++ b/src/qmlcompiler/qqmljsfunctioninitializer.cpp @@ -136,8 +136,8 @@ QQmlJSCompilePass::Function QQmlJSFunctionInitializer::run( QQmlJS::DiagnosticMessage *error) { QQmlJS::SourceLocation bindingLocation; - bindingLocation.startColumn = irBinding.location.column; - bindingLocation.startLine = irBinding.location.line; + bindingLocation.startLine = irBinding.location.line(); + bindingLocation.startColumn = irBinding.location.column(); QQmlJSCompilePass::Function function; function.qmlScope = m_scopeType; diff --git a/src/qmlcompiler/qqmljstyperesolver.cpp b/src/qmlcompiler/qqmljstyperesolver.cpp index 66be06a28d..9160985635 100644 --- a/src/qmlcompiler/qqmljstyperesolver.cpp +++ b/src/qmlcompiler/qqmljstyperesolver.cpp @@ -131,7 +131,7 @@ QQmlJSScope::ConstPtr QQmlJSTypeResolver::scopeForLocation(const QV4::CompiledData::Location &location) const { qCDebug(lcTypeResolver()).nospace() - << "looking for object at " << location.line << ':' << location.column; + << "looking for object at " << location.line() << ':' << location.column(); return m_objectsByLocation[location]; } diff --git a/src/qmltest/quicktest.cpp b/src/qmltest/quicktest.cpp index 5cfff6ddaa..e7ad511fe1 100644 --- a/src/qmltest/quicktest.cpp +++ b/src/qmltest/quicktest.cpp @@ -323,8 +323,8 @@ private: } else { QQmlError error; error.setUrl(compilationUnit->url()); - error.setLine(binding->location.line); - error.setColumn(binding->location.column); + error.setLine(binding->location.line()); + error.setColumn(binding->location.column()); error.setDescription(QStringLiteral("the 'name' property of a TestCase must be a literal string")); result.errors << error; } diff --git a/tools/qmltc/prototype/codegenerator.cpp b/tools/qmltc/prototype/codegenerator.cpp index 34d059c836..a28aea37fc 100644 --- a/tools/qmltc/prototype/codegenerator.cpp +++ b/tools/qmltc/prototype/codegenerator.cpp @@ -1189,16 +1189,16 @@ void CodeGenerator::compileBinding(QQmlJSAotObject ¤t, const QmlIR::Bindin qCWarning(lcCodeGenerator) << QStringLiteral("Binding at line %1 column %2 is not deferred as it is a " "binding on a group property.") - .arg(QString::number(binding.location.line), - QString::number(binding.location.column)); + .arg(QString::number(binding.location.line()), + QString::number(binding.location.column())); // we do not support PropertyChanges and other types with similar // behavior yet, so this binding is compiled } else { qCDebug(lcCodeGenerator) << QStringLiteral( "Binding at line %1 column %2 is deferred and thus not compiled") - .arg(QString::number(binding.location.line), - QString::number(binding.location.column)); + .arg(QString::number(binding.location.line()), + QString::number(binding.location.column())); return; } } @@ -1939,5 +1939,5 @@ void CodeGenerator::recordError(const QQmlJS::SourceLocation &location, const QS void CodeGenerator::recordError(const QV4::CompiledData::Location &location, const QString &message) { - recordError(QQmlJS::SourceLocation { 0, 0, location.line, location.column }, message); + recordError(QQmlJS::SourceLocation { 0, 0, location.line(), location.column() }, message); } diff --git a/tools/qmltc/prototype/qml2cppcontext.h b/tools/qmltc/prototype/qml2cppcontext.h index 56bb5a12db..7656ea2859 100644 --- a/tools/qmltc/prototype/qml2cppcontext.h +++ b/tools/qmltc/prototype/qml2cppcontext.h @@ -57,7 +57,7 @@ struct Qml2CppContext void recordError(const QV4::CompiledData::Location &location, const QString &message) const { - recordError(QQmlJS::SourceLocation { 0, 0, location.line, location.column }, message); + recordError(QQmlJS::SourceLocation { 0, 0, location.line(), location.column() }, message); } }; diff --git a/tools/qmltc/prototype/typeresolver.cpp b/tools/qmltc/prototype/typeresolver.cpp index 25d340afe7..bf3bdeea80 100644 --- a/tools/qmltc/prototype/typeresolver.cpp +++ b/tools/qmltc/prototype/typeresolver.cpp @@ -75,7 +75,7 @@ void TypeResolver::init(Visitor &visitor, QQmlJS::AST::Node *program) QQmlJSScope::Ptr TypeResolver::scopeForLocation(const QV4::CompiledData::Location &location) const { qCDebug(lcTypeResolver2()).nospace() - << "looking for object at " << location.line << ':' << location.column; + << "looking for object at " << location.line() << ':' << location.column(); return m_objectsByLocationNonConst.value(location); } diff --git a/tools/qmltc/qmltccompiler.h b/tools/qmltc/qmltccompiler.h index e55ee47538..248029719f 100644 --- a/tools/qmltc/qmltccompiler.h +++ b/tools/qmltc/qmltccompiler.h @@ -102,7 +102,7 @@ private: void recordError(const QV4::CompiledData::Location &location, const QString &message, QQmlJSLoggerCategory category = Log_Compiler) { - recordError(QQmlJS::SourceLocation { 0, 0, location.line, location.column }, message, + recordError(QQmlJS::SourceLocation { 0, 0, location.line(), location.column() }, message, category); } }; -- cgit v1.2.3