Refactor: Copy exactly required count of args and avoid pop_back()

This commit is contained in:
Alex Turbov
2021-07-27 23:22:10 +03:00
committed by Brad King
parent 2a72cad9be
commit 00961a4782

View File

@@ -498,18 +498,19 @@ bool cmConditionEvaluator::HandleLevel0(cmArgumentList& newArgs,
status = MessageType::FATAL_ERROR;
return false;
}
// store the reduced args in this vector
auto argP1 = std::next(arg);
std::vector<cmExpandedCommandArgument> newArgs2{ argP1, argClose };
newArgs2.pop_back();
auto argOpen = std::next(arg);
const std::vector<cmExpandedCommandArgument> subExpr(
argOpen, std::prev(argClose));
// now recursively invoke IsTrue to handle the values inside the
// parenthetical expression
const auto value = this->IsTrue(newArgs2, errorString, status);
const auto value = this->IsTrue(subExpr, errorString, status);
*arg = cmExpandedCommandArgument(bool2string(value), true);
argP1 = std::next(arg);
argOpen = std::next(arg);
// remove the now evaluated parenthetical expression
newArgs.erase(argP1, argClose);
newArgs.erase(argOpen, argClose);
}
}
return true;