summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmFunctionCommand.cxx5
-rw-r--r--Source/cmMakefile.h10
2 files changed, 12 insertions, 3 deletions
diff --git a/Source/cmFunctionCommand.cxx b/Source/cmFunctionCommand.cxx
index 8bad1a4..f36eb74 100644
--- a/Source/cmFunctionCommand.cxx
+++ b/Source/cmFunctionCommand.cxx
@@ -104,7 +104,8 @@ bool cmFunctionHelperCommand::InvokeInitialPass
}
// we push a scope on the makefile
- this->Makefile->PushScope();
+ cmMakefile::ScopePushPop varScope(this->Makefile);
+ static_cast<void>(varScope);
// set the value of argc
cmOStringStream strStream;
@@ -167,13 +168,11 @@ bool cmFunctionHelperCommand::InvokeInitialPass
}
if (status.GetReturnInvoked())
{
- this->Makefile->PopScope();
return true;
}
}
// pop scope on the makefile
- this->Makefile->PopScope();
return true;
}
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index c0e0bf4..c77fcdb 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -780,6 +780,16 @@ public:
void PopScope();
void RaiseScope(const char *var, const char *value);
+ /** Helper class to push and pop scopes automatically. */
+ class ScopePushPop
+ {
+ public:
+ ScopePushPop(cmMakefile* m): Makefile(m) { this->Makefile->PushScope(); }
+ ~ScopePushPop() { this->Makefile->PopScope(); }
+ private:
+ cmMakefile* Makefile;
+ };
+
void IssueMessage(cmake::MessageType t,
std::string const& text) const;