From 49fbe56deff6380884476a74bdb2e4a3e122b611 Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Tue, 25 Oct 2011 13:42:07 +0200
Subject: [PATCH] C++ parser: Don't fail on REVISION in Q_PROPERTY.

Change-Id: Ia7407969dc56308fe3eb843e97b93e65eb235186
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
---
 src/libs/3rdparty/cplusplus/Bind.cpp            |  2 ++
 src/libs/3rdparty/cplusplus/Parser.cpp          |  1 +
 .../3rdparty/cplusplus/QtContextKeywords.cpp    | 17 +++++++++++++++++
 src/libs/3rdparty/cplusplus/QtContextKeywords.h |  3 ++-
 4 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/libs/3rdparty/cplusplus/Bind.cpp b/src/libs/3rdparty/cplusplus/Bind.cpp
index 32420271b9c..73016868825 100644
--- a/src/libs/3rdparty/cplusplus/Bind.cpp
+++ b/src/libs/3rdparty/cplusplus/Bind.cpp
@@ -1909,6 +1909,8 @@ bool Bind::visit(QtPropertyDeclarationAST *ast)
             flags |= QtPropertyDeclaration::ResetFunction;
         } else if (name == "NOTIFY") {
             flags |= QtPropertyDeclaration::NotifyFunction;
+        } else if (name == "REVISION") {
+            // ### handle REVISION property
         } else if (name == "DESIGNABLE") {
             qtPropertyAttribute(translationUnit(), it->value->expression, &flags,
                                 QtPropertyDeclaration::DesignableFlag, QtPropertyDeclaration::DesignableFunction);
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 747491d5ccb..d0e9dc7c60e 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -1999,6 +1999,7 @@ bool Parser::parseQtPropertyDeclaration(DeclarationAST *&node)
                 case Token_WRITE:
                 case Token_RESET:
                 case Token_NOTIFY:
+                case Token_REVISION:
                 case Token_DESIGNABLE:
                 case Token_SCRIPTABLE:
                 case Token_STORED:
diff --git a/src/libs/3rdparty/cplusplus/QtContextKeywords.cpp b/src/libs/3rdparty/cplusplus/QtContextKeywords.cpp
index f4f7a7d100d..cc4fdff1f1e 100644
--- a/src/libs/3rdparty/cplusplus/QtContextKeywords.cpp
+++ b/src/libs/3rdparty/cplusplus/QtContextKeywords.cpp
@@ -110,6 +110,23 @@ static inline int classify8(const char *s) {
       }
     }
   }
+  if (s[0] == 'R') {
+    if (s[1] == 'E') {
+      if (s[2] == 'V') {
+        if (s[3] == 'I') {
+          if (s[4] == 'S') {
+            if (s[5] == 'I') {
+              if (s[6] == 'O') {
+                if (s[7] == 'N') {
+                  return Token_REVISION;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   return Token_not_Qt_context_keyword;
 }
 
diff --git a/src/libs/3rdparty/cplusplus/QtContextKeywords.h b/src/libs/3rdparty/cplusplus/QtContextKeywords.h
index f3ea763986b..b84ccf6ffce 100644
--- a/src/libs/3rdparty/cplusplus/QtContextKeywords.h
+++ b/src/libs/3rdparty/cplusplus/QtContextKeywords.h
@@ -17,7 +17,8 @@ enum {
     Token_STORED,
     Token_CONSTANT,
     Token_DESIGNABLE,
-    Token_SCRIPTABLE
+    Token_SCRIPTABLE,
+    Token_REVISION
 };
 
 CPLUSPLUS_EXPORT int classifyQtContextKeyword(const char *s, int n);
-- 
GitLab