GenEx: Parse colon after arguments separator colon specially.

The rationale is similar to that in commit b3d8f5da (GenEx: Parse comma
after colon tokens specially, 2012-10-04), in that colon tokens should
not be parsed as identifier-argument delimiters after the first colon.
This commit is contained in:
Stephen Kelly 2012-10-12 16:51:16 +02:00 committed by Brad King
parent 7aa99270fa
commit e2d141d474
3 changed files with 19 additions and 2 deletions

View File

@ -14,6 +14,8 @@
#include "cmGeneratorExpressionEvaluator.h"
#include "assert.h"
//----------------------------------------------------------------------------
cmGeneratorExpressionParser::cmGeneratorExpressionParser(
const std::vector<cmGeneratorExpressionToken> &tokens)
@ -124,6 +126,11 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression(
parameters.resize(parameters.size() + 1);
++this->it;
}
while (this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator)
{
extendText(*(parameters.end() - 1), this->it);
++this->it;
}
while(this->it->TokenType != cmGeneratorExpressionToken::EndExpression)
{
this->ParseContent(*(parameters.end() - 1));
@ -133,7 +140,7 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression(
parameters.resize(parameters.size() + 1);
++this->it;
}
if (this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator)
while (this->it->TokenType == cmGeneratorExpressionToken::ColonSeparator)
{
extendText(*(parameters.end() - 1), this->it);
++this->it;
@ -233,7 +240,7 @@ void cmGeneratorExpressionParser::ParseContent(
}
else
{
// TODO: Unreachable. Assert?
assert(!"Got unexpected syntax token.");
}
++this->it;
return;

View File

@ -44,6 +44,11 @@ add_custom_target(check ALL
-Dtest_strequal_one_empty=$<STREQUAL:something,>
-Dtest_angle_r=$<ANGLE-R>
-Dtest_comma=$<COMMA>
-Dtest_colons_1=$<1::>
-Dtest_colons_2=$<1:::>
-Dtest_colons_3=$<1:Qt5::Core>
-Dtest_colons_4=$<1:C:\\CMake>
-Dtest_colons_5=$<1:C:/CMake>
-P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake
COMMAND ${CMAKE_COMMAND} -E echo "check done"
VERBATIM

View File

@ -45,3 +45,8 @@ check(test_strequal_both_empty "1")
check(test_strequal_one_empty "0")
check(test_angle_r ">")
check(test_comma ",")
check(test_colons_1 ":")
check(test_colons_2 "::")
check(test_colons_3 "Qt5::Core")
check(test_colons_4 "C:\\\\CMake")
check(test_colons_5 "C:/CMake")