From 3c4fa4c8924c1e219981bbc30ad02a89fd144ab6 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
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<cmListFileArgument> args)
+    : Impl{ std::make_shared<Implementation>(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<cmListFileArgument> 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<cmListFileArgument> args)
+      : cmCommandContext{ std::move(name), line }
+      , Arguments{ std::move(args) }
+    {
+    }
+    std::vector<cmListFileArgument> Arguments;
+  };
+
+  std::shared_ptr<Implementation const> 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<cmListFileArgument> args)
-    : Impl{ std::make_shared<Implementation>(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<cmListFileArgument> 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<cmListFileArgument> args)
-      : cmCommandContext{ std::move(name), line }
-      , Arguments{ std::move(args) }
-    {
-    }
-    std::vector<cmListFileArgument> Arguments;
-  };
-
-  std::shared_ptr<Implementation const> 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 <brad.king@kitware.com>
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<cmListFileContext> 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<std::string> 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<std::string> 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 <brad.king@kitware.com>
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<cmListFileArgument> 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<cmListFileArgument> Arguments;
   };
 
@@ -147,11 +129,10 @@ public:
     cmListFileFunction const& lff, std::string const& fileName,
     cm::optional<std::string> 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

