summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorExpressionLexer.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2012-09-19 12:28:16 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2012-09-19 12:28:16 (GMT)
commitd407dcdbc824688510837ec85bb2e3c85cf096bd (patch)
tree6368e164279647c27ac80a8d49835eed45f5e575 /Source/cmGeneratorExpressionLexer.cxx
parent281654b5d6e93f6e91bbf0e7091f8ffea40f79d5 (diff)
parent91011bd217726f73e362b10d77a6638977d6a781 (diff)
downloadCMake-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.cxx85
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;
+}