Browse Source

cmState: Add Snapshot method to get bottom of call stack

The bottom of the call stack is always a long-lived snapshot and can be
saved for later use with cmOutputConverter.
Brad King 9 years ago
parent
commit
18b6676bff
2 changed files with 16 additions and 0 deletions
  1. 15 0
      Source/cmState.cxx
  2. 1 0
      Source/cmState.h

+ 15 - 0
Source/cmState.cxx

@@ -1213,6 +1213,21 @@ cmState::Snapshot cmState::Snapshot::GetCallStackParent() const
   return snapshot;
 }
 
+cmState::Snapshot cmState::Snapshot::GetCallStackBottom() const
+{
+  assert(this->State);
+  assert(this->Position != this->State->SnapshotData.Root());
+
+  PositionType pos = this->Position;
+  while (pos->SnapshotType != cmState::BaseType &&
+         pos->SnapshotType != cmState::BuildsystemDirectoryType &&
+         pos != this->State->SnapshotData.Root())
+    {
+    ++pos;
+    }
+  return Snapshot(this->State, pos);
+}
+
 void cmState::Snapshot::PushPolicy(cmPolicies::PolicyMap entry, bool weak)
 {
   PositionType pos = this->Position;

+ 1 - 0
Source/cmState.h

@@ -75,6 +75,7 @@ public:
     bool IsValid() const;
     Snapshot GetBuildsystemDirectoryParent() const;
     Snapshot GetCallStackParent() const;
+    Snapshot GetCallStackBottom() const;
     SnapshotType GetType() const;
 
     void SetPolicy(cmPolicies::PolicyID id, cmPolicies::PolicyStatus status);