From 00961a4782d9b22adce4d75ea61eb2f1d16ad0e5 Mon Sep 17 00:00:00 2001 From: Alex Turbov Date: Tue, 27 Jul 2021 23:22:10 +0300 Subject: Refactor: Copy exactly required count of args and avoid `pop_back()` --- Source/cmConditionEvaluator.cxx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Source/cmConditionEvaluator.cxx b/Source/cmConditionEvaluator.cxx index d55a89c..ea5dce5 100644 --- a/Source/cmConditionEvaluator.cxx +++ b/Source/cmConditionEvaluator.cxx @@ -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 newArgs2{ argP1, argClose }; - newArgs2.pop_back(); + auto argOpen = std::next(arg); + const std::vector 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; -- cgit v0.12