summaryrefslogtreecommitdiffstats
path: root/Source/cmDefinitions.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmDefinitions.cxx')
-rw-r--r--Source/cmDefinitions.cxx37
1 files changed, 19 insertions, 18 deletions
diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx
index 61328be..f54bc4d 100644
--- a/Source/cmDefinitions.cxx
+++ b/Source/cmDefinitions.cxx
@@ -11,38 +11,39 @@
============================================================================*/
#include "cmDefinitions.h"
-//----------------------------------------------------------------------------
-cmDefinitions::Def cmDefinitions::NoDef;
+#include <assert.h>
//----------------------------------------------------------------------------
-cmDefinitions::cmDefinitions(cmDefinitions* parent)
- : Up(parent)
-{
-}
+cmDefinitions::Def cmDefinitions::NoDef;
//----------------------------------------------------------------------------
-cmDefinitions::Def const&
-cmDefinitions::GetInternal(const std::string& key)
+cmDefinitions::Def const& cmDefinitions::GetInternal(
+ const std::string& key,
+ std::list<cmDefinitions>::reverse_iterator rbegin,
+ std::list<cmDefinitions>::reverse_iterator rend)
{
- MapType::const_iterator i = this->Map.find(key);
- if(i != this->Map.end())
+ assert(rbegin != rend);
+ MapType::const_iterator i = rbegin->Map.find(key);
+ if (i != rbegin->Map.end())
{
return i->second;
}
- cmDefinitions* up = this->Up;
- if(!up)
+ std::list<cmDefinitions>::reverse_iterator rit = rbegin;
+ ++rit;
+ if (rit == rend)
{
- return this->NoDef;
+ return cmDefinitions::NoDef;
}
- // Query the parent scope and store the result locally.
- Def def = up->GetInternal(key);
- return this->Map.insert(MapType::value_type(key, def)).first->second;
+ Def const& def = cmDefinitions::GetInternal(key, rit, rend);
+ return rbegin->Map.insert(MapType::value_type(key, def)).first->second;
}
//----------------------------------------------------------------------------
-const char* cmDefinitions::Get(const std::string& key)
+const char* cmDefinitions::Get(const std::string& key,
+ std::list<cmDefinitions>::reverse_iterator rbegin,
+ std::list<cmDefinitions>::reverse_iterator rend)
{
- Def const& def = this->GetInternal(key);
+ Def const& def = cmDefinitions::GetInternal(key, rbegin, rend);
return def.Exists? def.c_str() : 0;
}