mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 05:40:54 -06:00
Revise implementation of case-insensitive command names
Store both the as-written and lower-case command names and use the latter to avoid case-insensitive string comparisons. With this I obtain 2-6% speed increase (on Windows) for the configure step with no significant changes in memory usage. A case-insensitive comparison is a lot slower than just calling `==` because the operator will use things like memcmp, so prefer the latter. The `cmSystemTools::LowerCase` function allocates a new string each time it is called, so before this change we were allocating in: * cmMakefile::Configure two times for each function (to look for `cmake_minimum_required` and `project`) * cmMakefile::ExecuteCommand twice by function by calling cmState::GetCommand and copying the name Now we are only allocating once by function instead of four.
This commit is contained in:
committed by
Brad King
parent
743f24bac6
commit
b1a05d6c76
@@ -29,10 +29,10 @@ bool cmForEachFunctionBlocker::IsFunctionBlocked(const cmListFileFunction& lff,
|
||||
cmMakefile& mf,
|
||||
cmExecutionStatus& inStatus)
|
||||
{
|
||||
if (!cmSystemTools::Strucmp(lff.Name.c_str(), "foreach")) {
|
||||
if (lff.Name.Lower == "foreach") {
|
||||
// record the number of nested foreach commands
|
||||
this->Depth++;
|
||||
} else if (!cmSystemTools::Strucmp(lff.Name.c_str(), "endforeach")) {
|
||||
} else if (lff.Name.Lower == "endforeach") {
|
||||
// if this is the endofreach for this statement
|
||||
if (!this->Depth) {
|
||||
// Remove the function blocker for this scope or bail.
|
||||
@@ -97,7 +97,7 @@ bool cmForEachFunctionBlocker::IsFunctionBlocked(const cmListFileFunction& lff,
|
||||
bool cmForEachFunctionBlocker::ShouldRemove(const cmListFileFunction& lff,
|
||||
cmMakefile& mf)
|
||||
{
|
||||
if (!cmSystemTools::Strucmp(lff.Name.c_str(), "endforeach")) {
|
||||
if (lff.Name.Lower == "endforeach") {
|
||||
std::vector<std::string> expandedArguments;
|
||||
mf.ExpandArguments(lff.Arguments, expandedArguments);
|
||||
// if the endforeach has arguments then make sure
|
||||
|
||||
Reference in New Issue
Block a user