diff options
author | Ben Boeckel <ben.boeckel@kitware.com> | 2014-11-26 17:55:44 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2014-11-26 18:45:06 (GMT) |
commit | 7d674b5f0b28a610333644d417c2e8cb796cc9e4 (patch) | |
tree | 362847564a783ffb8fe9580fa98df3627a12372c /Source/cmStringCommand.cxx | |
parent | d2f2a2e226a8717d6fdb6df0ed4858d1629f557c (diff) | |
download | CMake-7d674b5f0b28a610333644d417c2e8cb796cc9e4.zip CMake-7d674b5f0b28a610333644d417c2e8cb796cc9e4.tar.gz CMake-7d674b5f0b28a610333644d417c2e8cb796cc9e4.tar.bz2 |
Revert "ClearMatches: Only clear matches which were actually set" (#15261)
This reverts commit v3.1.0-rc1~557^2~2 (ClearMatches: Only clear matches
which were actually set, 2014-03-12). The optimization did not track
the match count in the same scope as the variables, allowing possible
inconsistency.
Resolve conflicts in Source/cmIfCommand.cxx, Source/cmMakefile.cxx,
and Source/cmMakefile.h by moving the changes to the new location
of the code involved.
Diffstat (limited to 'Source/cmStringCommand.cxx')
-rw-r--r-- | Source/cmStringCommand.cxx | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx index 90a8f85..93aa083 100644 --- a/Source/cmStringCommand.cxx +++ b/Source/cmStringCommand.cxx @@ -310,7 +310,7 @@ bool cmStringCommand::RegexMatch(std::vector<std::string> const& args) input += args[i]; } - this->Makefile->ClearMatches(); + this->ClearMatches(this->Makefile); // Compile the regular expression. cmsys::RegularExpression re; if(!re.compile(regex.c_str())) @@ -325,7 +325,7 @@ bool cmStringCommand::RegexMatch(std::vector<std::string> const& args) std::string output; if(re.find(input.c_str())) { - this->Makefile->StoreMatches(re); + this->StoreMatches(this->Makefile, re); std::string::size_type l = re.start(); std::string::size_type r = re.end(); if(r-l == 0) @@ -359,7 +359,7 @@ bool cmStringCommand::RegexMatchAll(std::vector<std::string> const& args) input += args[i]; } - this->Makefile->ClearMatches(); + this->ClearMatches(this->Makefile); // Compile the regular expression. cmsys::RegularExpression re; if(!re.compile(regex.c_str())) @@ -376,7 +376,7 @@ bool cmStringCommand::RegexMatchAll(std::vector<std::string> const& args) const char* p = input.c_str(); while(re.find(p)) { - this->Makefile->StoreMatches(re); + this->StoreMatches(this->Makefile, re); std::string::size_type l = re.start(); std::string::size_type r = re.end(); if(r-l == 0) @@ -463,7 +463,7 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args) input += args[i]; } - this->Makefile->ClearMatches(); + this->ClearMatches(this->Makefile); // Compile the regular expression. cmsys::RegularExpression re; if(!re.compile(regex.c_str())) @@ -480,7 +480,7 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args) std::string::size_type base = 0; while(re.find(input.c_str()+base)) { - this->Makefile->StoreMatches(re); + this->StoreMatches(this->Makefile, re); std::string::size_type l2 = re.start(); std::string::size_type r = re.end(); @@ -541,6 +541,38 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args) } //---------------------------------------------------------------------------- +void cmStringCommand::ClearMatches(cmMakefile* mf) +{ + for (unsigned int i=0; i<10; i++) + { + char name[128]; + sprintf(name, "CMAKE_MATCH_%d", i); + const char* s = mf->GetDefinition(name); + if(s && *s != 0) + { + mf->AddDefinition(name, ""); + mf->MarkVariableAsUsed(name); + } + } +} + +//---------------------------------------------------------------------------- +void cmStringCommand::StoreMatches(cmMakefile* mf,cmsys::RegularExpression& re) +{ + for (unsigned int i=0; i<10; i++) + { + std::string m = re.match(i); + if(m.size() > 0) + { + char name[128]; + sprintf(name, "CMAKE_MATCH_%d", i); + mf->AddDefinition(name, re.match(i).c_str()); + mf->MarkVariableAsUsed(name); + } + } +} + +//---------------------------------------------------------------------------- bool cmStringCommand::HandleFindCommand(std::vector<std::string> const& args) { |