aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2023-12-18 10:54:51 +0100
committerUlf Hermann <ulf.hermann@qt.io>2023-12-22 09:50:35 +0100
commitce8ecf82113a3312f4542189160a4ea0349c7990 (patch)
treed0647ff2f8f90abf1bf9f090dd577f9b1a0af180
parent49ea766c8f63ac36d002350d6255ea3cab52ddb6 (diff)
Dom: Do not pass large objects by value, next round
Generally, pass arguments by const ref so that we don't have to visit all call sites for now. Local variables are moved where it makes sense. Coverity-Id: 433947 Coverity-Id: 433946 Coverity-Id: 433945 Coverity-Id: 433943 Coverity-Id: 433942 Coverity-Id: 433940 Coverity-Id: 433935 Coverity-Id: 433931 Coverity-Id: 433930 Change-Id: Ie82417f28cf3e913951c68a90bb8384379957750 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-rw-r--r--src/qmldom/qqmldomastdumper.cpp5
-rw-r--r--src/qmldom/qqmldomitem.cpp17
-rw-r--r--src/qmldom/qqmldomitem_p.h7
-rw-r--r--src/qmldom/qqmldomtop.cpp13
4 files changed, 25 insertions, 17 deletions
diff --git a/src/qmldom/qqmldomastdumper.cpp b/src/qmldom/qqmldomastdumper.cpp
index b870c8885a..b4986f7a71 100644
--- a/src/qmldom/qqmldomastdumper.cpp
+++ b/src/qmldom/qqmldomastdumper.cpp
@@ -1094,7 +1094,10 @@ void astNodeDumper(const Sink &s, Node *n, AstDumperOptions opt, int indent, int
QString astNodeDump(Node *n, AstDumperOptions opt, int indent, int baseIndent,
function_ref<QStringView(SourceLocation)>loc2str)
{
- return dumperToString([n, opt, indent, baseIndent, loc2str](const Sink &s) { astNodeDumper(s, n, opt, indent, baseIndent, loc2str); });
+ return dumperToString(
+ [n, opt, indent, baseIndent, loc2str = std::move(loc2str)](const Sink &s) {
+ astNodeDumper(s, n, opt, indent, baseIndent, std::move(loc2str));
+ });
}
} // end namespace Dom
diff --git a/src/qmldom/qqmldomitem.cpp b/src/qmldom/qqmldomitem.cpp
index 6881099c1f..98b3b267ee 100644
--- a/src/qmldom/qqmldomitem.cpp
+++ b/src/qmldom/qqmldomitem.cpp
@@ -792,7 +792,7 @@ bool DomItem::resolve(const Path &path, DomItem::Visitor visitor, const ErrorHan
myResolveErrors().error(tr("Root context %1 is not known").arg(path.headName())).handle(errorHandler);
return false;
}
- toDos[0] = {root, 1};
+ toDos[0] = {std::move(root), 1};
} else {
toDos[0] = {*this, 0};
}
@@ -888,11 +888,11 @@ bool DomItem::resolve(const Path &path, DomItem::Visitor visitor, const ErrorHan
if (!branchExhausted)
visitTree(
Path(),
- [toFind, &toDos, iPath](Path, const DomItem &item, bool) {
+ [&toFind, &toDos, iPath](Path, const DomItem &item, bool) {
// avoid non directly attached?
DomItem newItem = item[toFind];
if (newItem)
- toDos.append({ newItem, iPath });
+ toDos.append({ std::move(newItem), iPath });
return true;
},
VisitOption::VisitSelf | VisitOption::Recurse
@@ -1913,7 +1913,7 @@ static bool visitQualifiedNameLookup(
}
if (scope.internalKind() == DomType::QmlObject)
scope.visitDirectAccessibleScopes(
- [&lookupToDos, subPathNow, iSubPath](const DomItem &el) {
+ [&lookupToDos, &subPathNow, iSubPath](const DomItem &el) {
return el.visitLocalSymbolsNamed(
subPathNow, [&lookupToDos, iSubPath](const DomItem &subEl) {
lookupToDos.append({ subEl, iSubPath });
@@ -1924,7 +1924,7 @@ static bool visitQualifiedNameLookup(
visitedRefs);
} else {
bool cont = scope.visitDirectAccessibleScopes(
- [&visitor, subPathNow, lookupType](const DomItem &el) -> bool {
+ [&visitor, &subPathNow, lookupType](const DomItem &el) -> bool {
if (lookupType == LookupType::Symbol)
return el.visitLocalSymbolsNamed(subPathNow, visitor);
else
@@ -2464,7 +2464,7 @@ bool DomItem::iterateDirectSubpaths(DirectVisitor v) const
[this, v](auto &&el) { return el->iterateDirectSubpaths(*this, v); });
}
-DomItem DomItem::subReferencesItem(const PathEls::PathComponent &c, QList<Path> paths) const
+DomItem DomItem::subReferencesItem(const PathEls::PathComponent &c, const QList<Path> &paths) const
{
return subListItem(
List::fromQList<Path>(pathFromOwner().appendComponent(c), paths,
@@ -3085,8 +3085,9 @@ QList<DomItem> Reference::getAll(
qCWarning(refLog)
<< "getAll of reference at " << selfPath << " visits empty items.";
}
- RefCacheEntry::addForPath(env, selfPath,
- RefCacheEntry { RefCacheEntry::Cached::All, canonicalPaths });
+ RefCacheEntry::addForPath(
+ env, selfPath,
+ RefCacheEntry { RefCacheEntry::Cached::All, std::move(canonicalPaths) });
}
}
return res;
diff --git a/src/qmldom/qqmldomitem_p.h b/src/qmldom/qqmldomitem_p.h
index 4238d58412..4632202b24 100644
--- a/src/qmldom/qqmldomitem_p.h
+++ b/src/qmldom/qqmldomitem_p.h
@@ -1145,7 +1145,7 @@ public:
}
// bool dvSubReference(DirectVisitor visitor, const PathEls::PathComponent &c, Path
// referencedObject);
- DomItem subReferencesItem(const PathEls::PathComponent &c, QList<Path> paths) const;
+ DomItem subReferencesItem(const PathEls::PathComponent &c, const QList<Path> &paths) const;
DomItem subReferenceItem(const PathEls::PathComponent &c, const Path &referencedObject) const;
bool dvReference(DirectVisitor visitor, const PathEls::PathComponent &c, const Path &referencedObject) const
{
@@ -1153,7 +1153,8 @@ public:
return this->subReferenceItem(c, referencedObject);
});
}
- bool dvReferences(DirectVisitor visitor, const PathEls::PathComponent &c, QList<Path> paths) const
+ bool dvReferences(
+ DirectVisitor visitor, const PathEls::PathComponent &c, const QList<Path> &paths) const
{
return dvItem(visitor, c, [c, this, paths]() { return this->subReferencesItem(c, paths); });
}
@@ -1161,7 +1162,7 @@ public:
{
return dvReference(visitor, PathEls::Field(f), referencedObject);
}
- bool dvReferencesField(DirectVisitor visitor, QStringView f, QList<Path> paths) const
+ bool dvReferencesField(DirectVisitor visitor, QStringView f, const QList<Path> &paths) const
{
return dvReferences(visitor, PathEls::Field(f), paths);
}
diff --git a/src/qmldom/qqmldomtop.cpp b/src/qmldom/qqmldomtop.cpp
index a6b77e6cc2..f8a02d3f7d 100644
--- a/src/qmldom/qqmldomtop.cpp
+++ b/src/qmldom/qqmldomtop.cpp
@@ -897,11 +897,14 @@ DomTop::Callback envCallbackForFile(
DomTop::Callback loadCallback, DomTop::Callback allDirectDepsCallback,
DomTop::Callback endCallback)
{
- std::shared_ptr<DomEnvironment> ePtr = self.ownerAs<DomEnvironment>();
- std::weak_ptr<DomEnvironment> selfPtr = ePtr;
- std::shared_ptr<DomEnvironment> basePtr = ePtr->base();
- return [selfPtr, basePtr, map, lookupF, loadCallback, allDirectDepsCallback,
- endCallback](Path, const DomItem &, const DomItem &newItem) {
+ const std::shared_ptr<DomEnvironment> ePtr = self.ownerAs<DomEnvironment>();
+ return [selfPtr = std::weak_ptr<DomEnvironment>(ePtr),
+ basePtr = ePtr->base(),
+ map, lookupF,
+ loadCallback = std::move(loadCallback),
+ allDirectDepsCallback = std::move(allDirectDepsCallback),
+ endCallback = std::move(endCallback)](
+ Path, const DomItem &, const DomItem &newItem) {
shared_ptr<DomEnvironment> envPtr = selfPtr.lock();
if (!envPtr)
return;