diff options
author | Ken Martin <ken.martin@kitware.com> | 2002-07-17 14:48:39 (GMT) |
---|---|---|
committer | Ken Martin <ken.martin@kitware.com> | 2002-07-17 14:48:39 (GMT) |
commit | fcc410de44e59fa4f6145292dc1f13a4498bd8b1 (patch) | |
tree | 3a26d56bed8920250e9a23e87444d7bf5e3d62d3 /Source | |
parent | 3d3caacf9ec9f99cebcfaeb5ab105daa1046f945 (diff) | |
download | CMake-fcc410de44e59fa4f6145292dc1f13a4498bd8b1.zip CMake-fcc410de44e59fa4f6145292dc1f13a4498bd8b1.tar.gz CMake-fcc410de44e59fa4f6145292dc1f13a4498bd8b1.tar.bz2 |
fixed if statements inside a foreach
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmForEachCommand.cxx | 8 | ||||
-rw-r--r-- | Source/cmForEachCommand.h | 3 | ||||
-rw-r--r-- | Source/cmMakefile.cxx | 14 |
3 files changed, 17 insertions, 8 deletions
diff --git a/Source/cmForEachCommand.cxx b/Source/cmForEachCommand.cxx index e4cca41..c95c558 100644 --- a/Source/cmForEachCommand.cxx +++ b/Source/cmForEachCommand.cxx @@ -21,10 +21,16 @@ bool cmForEachFunctionBlocker:: IsFunctionBlocked(const char *name, const std::vector<std::string> &args, cmMakefile &mf) { + // prevent recusion and don't let this blobker blobk its own commands + if (m_Executing) + { + return false; + } // at end of for each execute recorded commands if (!strcmp(name,"ENDFOREACH") && args[0] == m_Args[0]) { + m_Executing = true; std::string variable = "${"; variable += m_Args[0]; variable += "}"; @@ -90,7 +96,7 @@ bool cmForEachCommand::InitialPass(std::vector<std::string> const& argsIn) std::vector<std::string> args; cmSystemTools::ExpandListArguments(argsIn, args); - if(args.size() < 2 ) + if(args.size() < 1) { this->SetError("called with incorrect number of arguments"); return false; diff --git a/Source/cmForEachCommand.h b/Source/cmForEachCommand.h index 064e30b..910f3d5 100644 --- a/Source/cmForEachCommand.h +++ b/Source/cmForEachCommand.h @@ -29,7 +29,7 @@ class cmForEachFunctionBlocker : public cmFunctionBlocker { public: - cmForEachFunctionBlocker() {} + cmForEachFunctionBlocker() {m_Executing = false;} virtual ~cmForEachFunctionBlocker() {} virtual bool IsFunctionBlocked(const char *name, const std::vector<std::string> &args, @@ -44,6 +44,7 @@ public: std::vector<std::string> m_Args; std::vector<std::string> m_Commands; std::vector<std::vector<std::string> > m_CommandArguments; + bool m_Executing; }; /** \class cmForEachCommand diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 496704a..9dbf31d 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -193,6 +193,12 @@ bool cmMakefile::CommandExists(const char* name) const void cmMakefile::ExecuteCommand(std::string &name, std::vector<std::string> const& arguments) { + // quick return if blocked + if(this->IsFunctionBlocked(name.c_str(), arguments)) + { + return; + } + // execute the command RegisteredCommandsMap::iterator pos = m_Commands.find(name); if(pos != m_Commands.end()) { @@ -342,12 +348,8 @@ bool cmMakefile::ReadListFile(const char* filename, const char* external) for(size_t i =0; i < numberFunctions; ++i) { cmListFileFunction& curFunction = lf->m_Functions[i]; - if(!this->IsFunctionBlocked(curFunction.m_Name.c_str(), - curFunction.m_Arguments)) - { - this->ExecuteCommand(curFunction.m_Name, - curFunction.m_Arguments); - } + this->ExecuteCommand(curFunction.m_Name, + curFunction.m_Arguments); } // send scope ended to and funciton blockers |