summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmDefinitions.cxx13
-rw-r--r--Source/cmDefinitions.h4
-rw-r--r--Source/cmMakefile.cxx10
3 files changed, 16 insertions, 11 deletions
diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx
index 873a7b4..d1fbe74 100644
--- a/Source/cmDefinitions.cxx
+++ b/Source/cmDefinitions.cxx
@@ -75,18 +75,13 @@ std::vector<std::string> cmDefinitions::LocalKeys() const
}
//----------------------------------------------------------------------------
-cmDefinitions cmDefinitions::MakeClosure() const
+cmDefinitions cmDefinitions::MakeClosure(
+ std::list<cmDefinitions const*>::iterator begin,
+ std::list<cmDefinitions const*>::iterator end)
{
std::set<std::string> undefined;
cmDefinitions closure;
- cmDefinitions const* defs = this;
- std::list<cmDefinitions const*> ups;
- while(defs)
- {
- ups.push_back(defs);
- defs = defs->Up;
- }
- closure.MakeClosure(undefined, ups.begin(), ups.end());
+ closure.MakeClosure(undefined, begin, end);
return closure;
}
diff --git a/Source/cmDefinitions.h b/Source/cmDefinitions.h
index 40e0531..67b6170 100644
--- a/Source/cmDefinitions.h
+++ b/Source/cmDefinitions.h
@@ -50,7 +50,9 @@ public:
/** Compute the set of all defined keys. */
std::vector<std::string> ClosureKeys() const;
- cmDefinitions MakeClosure() const;
+ static cmDefinitions MakeClosure(
+ std::list<cmDefinitions const*>::iterator begin,
+ std::list<cmDefinitions const*>::iterator end);
private:
// String with existence boolean.
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 8cfb83a..8797090 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -63,7 +63,15 @@ public:
void InitializeDefinitions(cmMakefile* parent)
{
- this->VarStack.back() = parent->Internal->VarStack.back().MakeClosure();
+ std::list<cmDefinitions const*> defPtrs;
+ for (std::list<cmDefinitions>::iterator it =
+ parent->Internal->VarStack.begin();
+ it != parent->Internal->VarStack.end(); ++it)
+ {
+ defPtrs.push_back(&*it);
+ }
+ this->VarStack.back() = cmDefinitions::MakeClosure(defPtrs.begin(),
+ defPtrs.end());
}
const char* GetDefinition(std::string const& name)