summaryrefslogtreecommitdiffstats
path: root/qmake
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@theqtcompany.com>2015-11-18 13:52:43 +0100
committerEdward Welbourne <edward.welbourne@theqtcompany.com>2015-11-20 15:01:51 +0000
commit213111f0fca36be27122c0e407989853fc01ef82 (patch)
tree7d5811fd0d3baa43ad3decb32f40c6017f4cc48f /qmake
parent3780b3da9969a67f4ebd92813b73f8ca15632707 (diff)
Rework scan for keyword in preprocessor directive.
When looking for the keyword in a preprocessor directive, we were checking for non-word characters to find its end. If that check failed (i.e. we had a word character) we would then check for EOL (which necessarily failed, on a word character). That made no sense. However, we genuinely have no interest in a directive with nothing after the keyword, so do check for EOL after the loop (once we've skipped spaces after the keyword). The loop itself was made needlessly complicated by, on finding the end of the keyword, skipping over later space inside the loop. Moved this outside the loop. Change-Id: Iccc2d445bf44deb75604e7fa60f2464e7397d8ed Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Diffstat (limited to 'qmake')
-rw-r--r--qmake/generators/makefiledeps.cpp26
1 files changed, 11 insertions, 15 deletions
diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp
index 7cdd757052..5623fb5860 100644
--- a/qmake/generators/makefiledeps.cpp
+++ b/qmake/generators/makefiledeps.cpp
@@ -572,22 +572,18 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file)
break;
// Got a preprocessor directive
-
- int keyword_len = 0;
const char *const keyword = buffer + x;
- while(x+keyword_len < buffer_len) {
- if (buffer[x + keyword_len] < 'a' || buffer[x + keyword_len] > 'z') {
- for (x += keyword_len;
- x < buffer_len && (buffer[x] == ' ' || buffer[x] == '\t');
- x++) {} // skip spaces after keyword
- break;
- } else if (qmake_endOfLine(buffer[x + keyword_len])) {
- x += keyword_len-1;
- keyword_len = 0;
- break;
- }
- keyword_len++;
- }
+ for (;
+ x < buffer_len && buffer[x] >= 'a' && buffer[x] <= 'z';
+ x++) {} // skip over identifier
+ int keyword_len = buffer + x - keyword;
+ for (;
+ x < buffer_len && (buffer[x] == ' ' || buffer[x] == '\t');
+ x++) {} // skip spaces after keyword
+
+ /* Keyword with nothing after it, e.g. #endif: not interesting. */
+ if (qmake_endOfLine(buffer[x]))
+ keyword_len = 0;
if((keyword_len == 7 && !strncmp(keyword, "include", 7)) // C & Obj-C
|| (keyword_len == 6 && !strncmp(keyword, "import", 6))) { // Obj-C