From 3c4fa4c8924c1e219981bbc30ad02a89fd144ab6 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 25 Jan 2022 08:35:56 -0500 Subject: cmListFileCache: Move cmListFileFunction earlier --- Source/cmListFileCache.h | 88 ++++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/Source/cmListFileCache.h b/Source/cmListFileCache.h index 4a52876..16ba2c2 100644 --- a/Source/cmListFileCache.h +++ b/Source/cmListFileCache.h @@ -70,6 +70,50 @@ struct cmListFileArgument long Line = 0; }; +class cmListFileFunction +{ +public: + cmListFileFunction(std::string name, long line, + std::vector args) + : Impl{ std::make_shared(std::move(name), line, + std::move(args)) } + { + } + + std::string const& OriginalName() const noexcept + { + return this->Impl->Name.Original; + } + + std::string const& LowerCaseName() const noexcept + { + return this->Impl->Name.Lower; + } + + long Line() const noexcept { return this->Impl->Line; } + + std::vector const& Arguments() const noexcept + { + return this->Impl->Arguments; + } + + operator cmCommandContext const&() const noexcept { return *this->Impl; } + +private: + struct Implementation : public cmCommandContext + { + Implementation(std::string name, long line, + std::vector args) + : cmCommandContext{ std::move(name), line } + , Arguments{ std::move(args) } + { + } + std::vector Arguments; + }; + + std::shared_ptr Impl; +}; + class cmListFileContext { public: @@ -117,50 +161,6 @@ bool operator<(const cmListFileContext& lhs, const cmListFileContext& rhs); bool operator==(cmListFileContext const& lhs, cmListFileContext const& rhs); bool operator!=(cmListFileContext const& lhs, cmListFileContext const& rhs); -class cmListFileFunction -{ -public: - cmListFileFunction(std::string name, long line, - std::vector args) - : Impl{ std::make_shared(std::move(name), line, - std::move(args)) } - { - } - - std::string const& OriginalName() const noexcept - { - return this->Impl->Name.Original; - } - - std::string const& LowerCaseName() const noexcept - { - return this->Impl->Name.Lower; - } - - long Line() const noexcept { return this->Impl->Line; } - - std::vector const& Arguments() const noexcept - { - return this->Impl->Arguments; - } - - operator cmCommandContext const&() const noexcept { return *this->Impl; } - -private: - struct Implementation : public cmCommandContext - { - Implementation(std::string name, long line, - std::vector args) - : cmCommandContext{ std::move(name), line } - , Arguments{ std::move(args) } - { - } - std::vector Arguments; - }; - - std::shared_ptr Impl; -}; - // Represent a backtrace (call stack). Provide value semantics // but use efficient reference-counting underneath to avoid copies. class cmListFileBacktrace -- cgit v0.12 From 03866411423c1b844580eb4879f378a592d73809 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 25 Jan 2022 08:37:37 -0500 Subject: cmListFileCache: Rename FromCommandContext to FromListFileFunction Accept a `cmListFileFunction` instead of a `cmCommandContext`. --- Source/cmFunctionBlocker.cxx | 2 +- Source/cmListFileCache.cxx | 28 ++++++++++++++-------------- Source/cmListFileCache.h | 5 +++-- Source/cmMakefile.cxx | 2 +- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Source/cmFunctionBlocker.cxx b/Source/cmFunctionBlocker.cxx index d4666d7..40e692d 100644 --- a/Source/cmFunctionBlocker.cxx +++ b/Source/cmFunctionBlocker.cxx @@ -27,7 +27,7 @@ bool cmFunctionBlocker::IsFunctionBlocked(const cmListFileFunction& lff, if (!this->ArgumentsMatch(lff, mf)) { cmListFileContext const& lfc = this->GetStartingContext(); cmListFileContext closingContext = - cmListFileContext::FromCommandContext(lff, lfc.FilePath); + cmListFileContext::FromListFileFunction(lff, lfc.FilePath); std::ostringstream e; /* clang-format off */ e << "A logical block opening on the line\n" diff --git a/Source/cmListFileCache.cxx b/Source/cmListFileCache.cxx index 9f8a18f..3da266d 100644 --- a/Source/cmListFileCache.cxx +++ b/Source/cmListFileCache.cxx @@ -369,68 +369,68 @@ cm::optional cmListFileParser::CheckNesting() const if (name == "if") { stack.push_back({ NestingStateEnum::If, - cmListFileContext::FromCommandContext(func, this->FileName), + cmListFileContext::FromListFileFunction(func, this->FileName), }); } else if (name == "elseif") { if (!TopIs(stack, NestingStateEnum::If)) { - return cmListFileContext::FromCommandContext(func, this->FileName); + return cmListFileContext::FromListFileFunction(func, this->FileName); } stack.back() = { NestingStateEnum::If, - cmListFileContext::FromCommandContext(func, this->FileName), + cmListFileContext::FromListFileFunction(func, this->FileName), }; } else if (name == "else") { if (!TopIs(stack, NestingStateEnum::If)) { - return cmListFileContext::FromCommandContext(func, this->FileName); + return cmListFileContext::FromListFileFunction(func, this->FileName); } stack.back() = { NestingStateEnum::Else, - cmListFileContext::FromCommandContext(func, this->FileName), + cmListFileContext::FromListFileFunction(func, this->FileName), }; } else if (name == "endif") { if (!TopIs(stack, NestingStateEnum::If) && !TopIs(stack, NestingStateEnum::Else)) { - return cmListFileContext::FromCommandContext(func, this->FileName); + return cmListFileContext::FromListFileFunction(func, this->FileName); } stack.pop_back(); } else if (name == "while") { stack.push_back({ NestingStateEnum::While, - cmListFileContext::FromCommandContext(func, this->FileName), + cmListFileContext::FromListFileFunction(func, this->FileName), }); } else if (name == "endwhile") { if (!TopIs(stack, NestingStateEnum::While)) { - return cmListFileContext::FromCommandContext(func, this->FileName); + return cmListFileContext::FromListFileFunction(func, this->FileName); } stack.pop_back(); } else if (name == "foreach") { stack.push_back({ NestingStateEnum::Foreach, - cmListFileContext::FromCommandContext(func, this->FileName), + cmListFileContext::FromListFileFunction(func, this->FileName), }); } else if (name == "endforeach") { if (!TopIs(stack, NestingStateEnum::Foreach)) { - return cmListFileContext::FromCommandContext(func, this->FileName); + return cmListFileContext::FromListFileFunction(func, this->FileName); } stack.pop_back(); } else if (name == "function") { stack.push_back({ NestingStateEnum::Function, - cmListFileContext::FromCommandContext(func, this->FileName), + cmListFileContext::FromListFileFunction(func, this->FileName), }); } else if (name == "endfunction") { if (!TopIs(stack, NestingStateEnum::Function)) { - return cmListFileContext::FromCommandContext(func, this->FileName); + return cmListFileContext::FromListFileFunction(func, this->FileName); } stack.pop_back(); } else if (name == "macro") { stack.push_back({ NestingStateEnum::Macro, - cmListFileContext::FromCommandContext(func, this->FileName), + cmListFileContext::FromListFileFunction(func, this->FileName), }); } else if (name == "endmacro") { if (!TopIs(stack, NestingStateEnum::Macro)) { - return cmListFileContext::FromCommandContext(func, this->FileName); + return cmListFileContext::FromListFileFunction(func, this->FileName); } stack.pop_back(); } diff --git a/Source/cmListFileCache.h b/Source/cmListFileCache.h index 16ba2c2..1d45b30 100644 --- a/Source/cmListFileCache.h +++ b/Source/cmListFileCache.h @@ -143,10 +143,11 @@ public: { } - static cmListFileContext FromCommandContext( - cmCommandContext const& lfcc, std::string const& fileName, + static cmListFileContext FromListFileFunction( + cmListFileFunction const& lff, std::string const& fileName, cm::optional deferId = {}) { + cmCommandContext const& lfcc = lff; cmListFileContext lfc; lfc.FilePath = fileName; lfc.Line = lfcc.Line; diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index cc687b1..68e61bb 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -339,7 +339,7 @@ public: cm::optional deferId, cmExecutionStatus& status) : Makefile(mf) { - cmListFileContext const& lfc = cmListFileContext::FromCommandContext( + cmListFileContext const& lfc = cmListFileContext::FromListFileFunction( lff, this->Makefile->StateSnapshot.GetExecutionListFile(), std::move(deferId)); this->Makefile->Backtrace = this->Makefile->Backtrace.Push(lfc); -- cgit v0.12 From 4959276c02ca5abf5775c608cc35dc8e09a8cc0a Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 25 Jan 2022 08:40:15 -0500 Subject: cmListFileCache: Remove cmCommandContext Subsume it inside `cmListFileFunction`. --- Source/cmListFileCache.h | 43 ++++++++++++------------------------------- 1 file changed, 12 insertions(+), 31 deletions(-) diff --git a/Source/cmListFileCache.h b/Source/cmListFileCache.h index 1d45b30..5d45027 100644 --- a/Source/cmListFileCache.h +++ b/Source/cmListFileCache.h @@ -23,28 +23,6 @@ class cmMessenger; -struct cmCommandContext -{ - struct cmCommandName - { - std::string Original; - std::string Lower; - cmCommandName() = default; - cmCommandName(std::string name) - : Original(std::move(name)) - , Lower(cmSystemTools::LowerCase(this->Original)) - { - } - } Name; - long Line = 0; - cmCommandContext() = default; - cmCommandContext(std::string name, long line) - : Name(std::move(name)) - , Line(line) - { - } -}; - struct cmListFileArgument { enum Delimiter @@ -82,12 +60,12 @@ public: std::string const& OriginalName() const noexcept { - return this->Impl->Name.Original; + return this->Impl->OriginalName; } std::string const& LowerCaseName() const noexcept { - return this->Impl->Name.Lower; + return this->Impl->LowerCaseName; } long Line() const noexcept { return this->Impl->Line; } @@ -97,17 +75,21 @@ public: return this->Impl->Arguments; } - operator cmCommandContext const&() const noexcept { return *this->Impl; } - private: - struct Implementation : public cmCommandContext + struct Implementation { Implementation(std::string name, long line, std::vector args) - : cmCommandContext{ std::move(name), line } + : OriginalName{ std::move(name) } + , LowerCaseName{ cmSystemTools::LowerCase(this->OriginalName) } + , Line{ line } , Arguments{ std::move(args) } { } + + std::string OriginalName; + std::string LowerCaseName; + long Line = 0; std::vector Arguments; }; @@ -147,11 +129,10 @@ public: cmListFileFunction const& lff, std::string const& fileName, cm::optional deferId = {}) { - cmCommandContext const& lfcc = lff; cmListFileContext lfc; lfc.FilePath = fileName; - lfc.Line = lfcc.Line; - lfc.Name = lfcc.Name.Original; + lfc.Line = lff.Line(); + lfc.Name = lff.OriginalName(); lfc.DeferId = std::move(deferId); return lfc; } -- cgit v0.12