summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2015-04-26 14:00:18 (GMT)
committerStephen Kelly <steveire@gmail.com>2015-04-29 21:54:02 (GMT)
commit60becdc65c5f8cfad4b2c6a33e3649d2acbddf39 (patch)
tree904d65c1798a133729dccbc6c563261744890812 /Source
parentd858f36339d61e45913165bc957d645bf1060f54 (diff)
downloadCMake-60becdc65c5f8cfad4b2c6a33e3649d2acbddf39.zip
CMake-60becdc65c5f8cfad4b2c6a33e3649d2acbddf39.tar.gz
CMake-60becdc65c5f8cfad4b2c6a33e3649d2acbddf39.tar.bz2
cmDefinitions: Implement MakeClosure in terms of a list of ancestors.
Diffstat (limited to 'Source')
-rw-r--r--Source/cmDefinitions.cxx25
-rw-r--r--Source/cmDefinitions.h5
2 files changed, 17 insertions, 13 deletions
diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx
index 5fe57c8..873a7b4 100644
--- a/Source/cmDefinitions.cxx
+++ b/Source/cmDefinitions.cxx
@@ -11,8 +11,6 @@
============================================================================*/
#include "cmDefinitions.h"
-#include <list>
-
//----------------------------------------------------------------------------
cmDefinitions::Def cmDefinitions::NoDef;
@@ -81,22 +79,25 @@ cmDefinitions cmDefinitions::MakeClosure() const
{
std::set<std::string> undefined;
cmDefinitions closure;
- closure.MakeClosure(undefined, this);
- return closure;
-}
-
-//----------------------------------------------------------------------------
-void cmDefinitions::MakeClosure(std::set<std::string>& undefined,
- cmDefinitions const* defs)
-{
+ cmDefinitions const* defs = this;
std::list<cmDefinitions const*> ups;
while(defs)
{
ups.push_back(defs);
defs = defs->Up;
}
- for (std::list<cmDefinitions const*>::const_iterator it = ups.begin();
- it != ups.end(); ++it)
+ closure.MakeClosure(undefined, ups.begin(), ups.end());
+ return closure;
+}
+
+//----------------------------------------------------------------------------
+void
+cmDefinitions::MakeClosure(std::set<std::string>& undefined,
+ std::list<cmDefinitions const*>::iterator begin,
+ std::list<cmDefinitions const*>::iterator end)
+{
+ for (std::list<cmDefinitions const*>::const_iterator it = begin;
+ it != end; ++it)
{
// Consider local definitions.
for(MapType::const_iterator mi = (*it)->Map.begin();
diff --git a/Source/cmDefinitions.h b/Source/cmDefinitions.h
index 6917402..40e0531 100644
--- a/Source/cmDefinitions.h
+++ b/Source/cmDefinitions.h
@@ -17,6 +17,8 @@
#include "cmsys/hash_map.hxx"
#endif
+#include <list>
+
/** \class cmDefinitions
* \brief Store a scope of variable definitions for CMake language.
*
@@ -80,7 +82,8 @@ private:
Def const& GetInternal(const std::string& key);
void MakeClosure(std::set<std::string>& undefined,
- cmDefinitions const* defs);
+ std::list<cmDefinitions const*>::iterator begin,
+ std::list<cmDefinitions const*>::iterator end);
};
#endif