Explorar o código

cmGeneratorExpressionLexer: only tokenize strings with a '$'

In standard libraries, `std::string::find` is usually implemented using
vectorized code. Since the Tokenize method iterates
character-by-character, doing an initial check using `find` improves
performance.
Ben Boeckel %!s(int64=7) %!d(string=hai) anos
pai
achega
14a13d30ee
Modificáronse 1 ficheiros con 6 adicións e 0 borrados
  1. 6 0
      Source/cmGeneratorExpressionLexer.cxx

+ 6 - 0
Source/cmGeneratorExpressionLexer.cxx

@@ -21,6 +21,12 @@ std::vector<cmGeneratorExpressionToken> cmGeneratorExpressionLexer::Tokenize(
 {
   std::vector<cmGeneratorExpressionToken> result;
 
+  if (input.find('$') == std::string::npos) {
+    result.push_back(cmGeneratorExpressionToken(
+      cmGeneratorExpressionToken::Text, input.c_str(), input.size()));
+    return result;
+  }
+
   const char* c = input.c_str();
   const char* upto = c;