diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2023-12-18 10:54:51 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2023-12-22 09:50:35 +0100 |
commit | ce8ecf82113a3312f4542189160a4ea0349c7990 (patch) | |
tree | d0647ff2f8f90abf1bf9f090dd577f9b1a0af180 | |
parent | 49ea766c8f63ac36d002350d6255ea3cab52ddb6 (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.cpp | 5 | ||||
-rw-r--r-- | src/qmldom/qqmldomitem.cpp | 17 | ||||
-rw-r--r-- | src/qmldom/qqmldomitem_p.h | 7 | ||||
-rw-r--r-- | src/qmldom/qqmldomtop.cpp | 13 |
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; |