summaryrefslogtreecommitdiff
path: root/Source/cmDefinitions.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-10-27 08:32:26 -0400
committerCMake Topic Stage <kwrobot@kitware.com>2014-10-27 08:32:26 -0400
commit8eb64831bec333914aab3af54e2d1deded02eb90 (patch)
treefa90031d682546d1b491be67c481a394edf18861 /Source/cmDefinitions.cxx
parent21cf9364f092004a027f11b5bf574804cc8cfded (diff)
parentd1b62185d6b66b27a3ef31b79d4cff1c5126793e (diff)
downloadcmake-8eb64831bec333914aab3af54e2d1deded02eb90.tar.gz
Merge topic 'revert-definition-map-lookup'
d1b62185 Merge branch 'parent-scope-tests' into variable-pull-failure 5f414cef Revert "cmDefinitions: Don't store parent lookups" e0c0b1ac test: add a test for PARENT_SCOPE with multiple scopes 064c415d test: add test for PARENT_SCOPE behavior
Diffstat (limited to 'Source/cmDefinitions.cxx')
-rw-r--r--Source/cmDefinitions.cxx22
1 files changed, 5 insertions, 17 deletions
diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx
index 5515f35516..fe32dd5d88 100644
--- a/Source/cmDefinitions.cxx
+++ b/Source/cmDefinitions.cxx
@@ -29,7 +29,7 @@ void cmDefinitions::Reset(cmDefinitions* parent)
//----------------------------------------------------------------------------
cmDefinitions::Def const&
-cmDefinitions::GetInternal(const std::string& key) const
+cmDefinitions::GetInternal(const std::string& key)
{
MapType::const_iterator i = this->Map.find(key);
if(i != this->Map.end())
@@ -38,8 +38,9 @@ cmDefinitions::GetInternal(const std::string& key) const
}
if(cmDefinitions* up = this->Up)
{
- // Query the parent scope.
- return up->GetInternal(key);
+ // 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;
}
return this->NoDef;
}
@@ -62,26 +63,13 @@ cmDefinitions::SetInternal(const std::string& key, Def const& def)
}
//----------------------------------------------------------------------------
-const char* cmDefinitions::Get(const std::string& key) const
+const char* cmDefinitions::Get(const std::string& key)
{
Def const& def = this->GetInternal(key);
return def.Exists? def.c_str() : 0;
}
//----------------------------------------------------------------------------
-void cmDefinitions::Pull(const std::string& key)
-{
- if (this->Up)
- {
- Def const& def = this->Up->GetInternal(key);
- if (def.Exists)
- {
- this->SetInternal(key, def);
- }
- }
-}
-
-//----------------------------------------------------------------------------
const char* cmDefinitions::Set(const std::string& key, const char* value)
{
Def const& def = this->SetInternal(key, Def(value));