From 1eefd16383bd0e3adb167ccf4e80f6563096594f Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Mon, 13 Jul 2009 12:05:29 +0200
Subject: [PATCH] Fixed a few typos and bugs in the ObjC++ support.

---
 src/libs/cplusplus/SimpleLexer.cpp       | 5 +++++
 src/libs/cplusplus/SimpleLexer.h         | 1 +
 src/plugins/cppeditor/cpphighlighter.cpp | 2 +-
 src/shared/cplusplus/Lexer.cpp           | 2 +-
 src/shared/cplusplus/Token.cpp           | 2 +-
 src/shared/cplusplus/Token.h             | 6 +++---
 6 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/libs/cplusplus/SimpleLexer.cpp b/src/libs/cplusplus/SimpleLexer.cpp
index f131c9de98e..93b93ec73cd 100644
--- a/src/libs/cplusplus/SimpleLexer.cpp
+++ b/src/libs/cplusplus/SimpleLexer.cpp
@@ -55,6 +55,11 @@ bool SimpleToken::isComment() const
     return _kind == T_COMMENT || _kind == T_DOXY_COMMENT;
 }
 
+bool SimpleToken::isObjCAtKeyword() const
+{
+    return _kind >= T_FIRST_LITERAL && _kind <= T_LAST_OBJC_AT_KEYWORD;
+}
+
 SimpleLexer::SimpleLexer()
     : _lastState(0),
       _skipComments(false),
diff --git a/src/libs/cplusplus/SimpleLexer.h b/src/libs/cplusplus/SimpleLexer.h
index 669b4c00453..872a236fd89 100644
--- a/src/libs/cplusplus/SimpleLexer.h
+++ b/src/libs/cplusplus/SimpleLexer.h
@@ -79,6 +79,7 @@ public:
     bool isOperator() const;
     bool isKeyword() const;
     bool isComment() const;
+    bool isObjCAtKeyword() const;
 
 public:
     int _kind;
diff --git a/src/plugins/cppeditor/cpphighlighter.cpp b/src/plugins/cppeditor/cpphighlighter.cpp
index 2f016c4d37d..20be805d546 100644
--- a/src/plugins/cppeditor/cpphighlighter.cpp
+++ b/src/plugins/cppeditor/cpphighlighter.cpp
@@ -157,7 +157,7 @@ void CppHighlighter::highlightBlock(const QString &text)
                 initialState = 0;
             }
 
-        } else if (tk.isKeyword() || isQtKeyword(tk.text()))
+        } else if (tk.isKeyword() || isQtKeyword(tk.text()) || tk.isObjCAtKeyword())
             setFormat(tk.position(), tk.length(), m_formats[CppKeywordFormat]);
 
         else if (tk.isOperator())
diff --git a/src/shared/cplusplus/Lexer.cpp b/src/shared/cplusplus/Lexer.cpp
index 2229b470bd2..5f727ef4afd 100644
--- a/src/shared/cplusplus/Lexer.cpp
+++ b/src/shared/cplusplus/Lexer.cpp
@@ -598,7 +598,7 @@ void Lexer::scan_helper(Token *tok)
 
                 do {
                     yyinp();
-                    if (! isalnum(_yychar))
+                    if (! (isalnum(_yychar) || _yychar == '_'))
                         break;
                 } while (_yychar);
 
diff --git a/src/shared/cplusplus/Token.cpp b/src/shared/cplusplus/Token.cpp
index bda5ecc5839..828da8da318 100644
--- a/src/shared/cplusplus/Token.cpp
+++ b/src/shared/cplusplus/Token.cpp
@@ -56,7 +56,7 @@ static const char *token_names[] = {
 
     ("<comment>"), ("<doxy comment>"),
 
-    ("<identifier>"), ("<int literal>"), ("<float literal>"), ("<char literal>"),
+    ("<identifier>"), ("<numeric literal>"), ("<char literal>"),
     ("<wide char literal>"), ("<string literal>"), ("<wide char literal>"),
     ("<@string literal>"), ("<angle string literal>"),
 
diff --git a/src/shared/cplusplus/Token.h b/src/shared/cplusplus/Token.h
index 99b986c7abb..6809468a1a6 100644
--- a/src/shared/cplusplus/Token.h
+++ b/src/shared/cplusplus/Token.h
@@ -224,9 +224,9 @@ enum Kind {
     T_AT_THROW,
     T_AT_TRY,
 
-    T_LAST_OBJC_AT_KEYWORD,
+    T_LAST_OBJC_AT_KEYWORD = T_AT_TRY,
 
-    T_FIRST_QT_KEYWORD = T_LAST_OBJC_AT_KEYWORD,
+    T_FIRST_QT_KEYWORD,
 
     // Qt keywords
     T_SIGNAL = T_FIRST_QT_KEYWORD,
@@ -300,7 +300,7 @@ public:
     { return kind == T_COMMENT || kind == T_DOXY_COMMENT; }
 
     inline bool isObjCAtKeyword() const
-    { return kind >= T_FIRST_OBJC_AT_KEYWORD && kind < T_LAST_OBJC_AT_KEYWORD; }
+    { return kind >= T_FIRST_OBJC_AT_KEYWORD && kind <= T_LAST_OBJC_AT_KEYWORD; }
 
     static const char *name(int kind);
 
-- 
GitLab