From a6890a1673aec8e3bf6afa7daa8d738ff4d32868 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 3 Sep 2009 08:26:31 -0400 Subject: Manage current local generator with automatic var The cmLocalGenerator::Configure method sets its cmLocalGenerator instance as the global generator's current local generator during configuration. This commit refactors management of the current local generator to use an automatic variable. This will allow early returns from the method. --- Source/cmLocalGenerator.cxx | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index cac52b2..c051e0b 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -68,11 +68,30 @@ cmLocalGenerator::~cmLocalGenerator() delete this->Makefile; } +//---------------------------------------------------------------------------- +class cmLocalGeneratorCurrent +{ + cmGlobalGenerator* GG; + cmLocalGenerator* LG; +public: + cmLocalGeneratorCurrent(cmLocalGenerator* lg) + { + this->GG = lg->GetGlobalGenerator(); + this->LG = this->GG->GetCurrentLocalGenerator(); + this->GG->SetCurrentLocalGenerator(lg); + } + ~cmLocalGeneratorCurrent() + { + this->GG->SetCurrentLocalGenerator(this->LG); + } +}; + +//---------------------------------------------------------------------------- void cmLocalGenerator::Configure() { - cmLocalGenerator* previousLg = - this->GetGlobalGenerator()->GetCurrentLocalGenerator(); - this->GetGlobalGenerator()->SetCurrentLocalGenerator(this); + // Manage the global generator's current local generator. + cmLocalGeneratorCurrent clg(this); + static_cast(clg); // make sure the CMakeFiles dir is there std::string filesDir = this->Makefile->GetStartOutputDirectory(); @@ -141,8 +160,6 @@ void cmLocalGenerator::Configure() } this->Configured = true; - - this->GetGlobalGenerator()->SetCurrentLocalGenerator(previousLg); } void cmLocalGenerator::SetupPathConversions() -- cgit v0.12