From b2df9bddec0b11180f196abb1485a1ca913591c7 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Fri, 3 Jul 2009 11:00:36 +0200
Subject: [PATCH] Made foreach a keyword when parsing with qtMocRun

---
 src/libs/cplusplus/pp-engine.cpp  |  2 ++
 src/shared/cplusplus/Keywords.cpp | 15 +++++++++++++++
 src/shared/cplusplus/Token.cpp    |  2 +-
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp
index c614daf45eb..c7688c986bd 100644
--- a/src/libs/cplusplus/pp-engine.cpp
+++ b/src/libs/cplusplus/pp-engine.cpp
@@ -1435,6 +1435,8 @@ bool Preprocessor::isQtReservedWord(const QByteArray &macroId) const
         return true;
     else if (size == 7 && macroId.at(0) == 's' && macroId == "signals")
         return true;
+    else if (size == 7 && macroId.at(0) == 'f' && macroId == "foreach")
+        return true;
     else if (size == 5 && macroId.at(0) == 's' && macroId == "slots")
         return true;
     return false;
diff --git a/src/shared/cplusplus/Keywords.cpp b/src/shared/cplusplus/Keywords.cpp
index e26244a0af7..3d8fc434f5e 100644
--- a/src/shared/cplusplus/Keywords.cpp
+++ b/src/shared/cplusplus/Keywords.cpp
@@ -620,6 +620,21 @@ static inline int classify7(const char *s, bool q) {
       }
     }
   }
+  else if (q && s[0] == 'f') {
+    if (s[1] == 'o') {
+      if (s[2] == 'r') {
+        if (s[3] == 'e') {
+          if (s[4] == 'a') {
+            if (s[5] == 'c') {
+              if (s[6] == 'h') {
+                return T_Q_FOREACH;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (q && s[0] == 's') {
     if (s[1] == 'i') {
       if (s[2] == 'g') {
diff --git a/src/shared/cplusplus/Token.cpp b/src/shared/cplusplus/Token.cpp
index 6e5e428c2db..37a95d6cd77 100644
--- a/src/shared/cplusplus/Token.cpp
+++ b/src/shared/cplusplus/Token.cpp
@@ -90,7 +90,7 @@ static const char *token_names[] = {
     ("@protected"), ("@protocol"), ("@public"), ("@required"), ("@selector"),
     ("@synchronized"), ("@synthesize"), ("@throw"), ("@try"),
 
-    ("SIGNAL"), ("SLOT"), ("Q_SIGNAL"), ("Q_SLOT"), ("signals"), ("slots")
+    ("SIGNAL"), ("SLOT"), ("Q_SIGNAL"), ("Q_SLOT"), ("signals"), ("slots"), ("Q_FOREACH")
 };
 
 Token::Token() :
-- 
GitLab