diff options
author | Brad King <brad.king@kitware.com> | 2012-09-19 12:28:16 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2012-09-19 12:28:16 (GMT) |
commit | d407dcdbc824688510837ec85bb2e3c85cf096bd (patch) | |
tree | 6368e164279647c27ac80a8d49835eed45f5e575 /Source/cmGeneratorExpressionLexer.cxx | |
parent | 281654b5d6e93f6e91bbf0e7091f8ffea40f79d5 (diff) | |
parent | 91011bd217726f73e362b10d77a6638977d6a781 (diff) | |
download | CMake-d407dcdbc824688510837ec85bb2e3c85cf096bd.zip CMake-d407dcdbc824688510837ec85bb2e3c85cf096bd.tar.gz CMake-d407dcdbc824688510837ec85bb2e3c85cf096bd.tar.bz2 |
Merge topic 'generator-expression-refactor'
91011bd cmGeneratorExpression: Port users to two-stage processing
f1eacf0 cmGeneratorExpression: Re-write for multi-stage evaluation
Diffstat (limited to 'Source/cmGeneratorExpressionLexer.cxx')
-rw-r--r-- | Source/cmGeneratorExpressionLexer.cxx | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Source/cmGeneratorExpressionLexer.cxx b/Source/cmGeneratorExpressionLexer.cxx new file mode 100644 index 0000000..cd71ec0 --- /dev/null +++ b/Source/cmGeneratorExpressionLexer.cxx @@ -0,0 +1,85 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2012 Stephen Kelly <steveire@gmail.com> + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmGeneratorExpressionLexer.h" + + +//---------------------------------------------------------------------------- +cmGeneratorExpressionLexer::cmGeneratorExpressionLexer() + : SawBeginExpression(false), SawGeneratorExpression(false) +{ + +} + +//---------------------------------------------------------------------------- +static void InsertText(const char *upto, const char *c, + std::vector<cmGeneratorExpressionToken> &result) +{ + if (upto != c) + { + result.push_back(cmGeneratorExpressionToken( + cmGeneratorExpressionToken::Text, upto, c - upto)); + } +} + +//---------------------------------------------------------------------------- +std::vector<cmGeneratorExpressionToken> +cmGeneratorExpressionLexer::Tokenize(const char *input) +{ + std::vector<cmGeneratorExpressionToken> result; + if (!input) + return result; + + const char *c = input; + const char *upto = c; + + for ( ; *c; ++c) + { + if(c[0] == '$' && c[1] == '<') + { + InsertText(upto, c, result); + upto = c; + result.push_back(cmGeneratorExpressionToken( + cmGeneratorExpressionToken::BeginExpression, upto, 2)); + upto = c + 2; + ++c; + SawBeginExpression = true; + } + else if(c[0] == '>') + { + InsertText(upto, c, result); + upto = c; + result.push_back(cmGeneratorExpressionToken( + cmGeneratorExpressionToken::EndExpression, upto, 1)); + upto = c + 1; + SawGeneratorExpression = SawBeginExpression; + } + else if(c[0] == ':') + { + InsertText(upto, c, result); + upto = c; + result.push_back(cmGeneratorExpressionToken( + cmGeneratorExpressionToken::ColonSeparator, upto, 1)); + upto = c + 1; + } + else if(c[0] == ',') + { + InsertText(upto, c, result); + upto = c; + result.push_back(cmGeneratorExpressionToken( + cmGeneratorExpressionToken::CommaSeparator, upto, 1)); + upto = c + 1; + } + } + InsertText(upto, c, result); + + return result; +} |