From 0f2a24641b24baac119a693c77897222eed0c879 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Thu, 1 Jul 2010 15:27:03 +0200
Subject: [PATCH] Get rid of NumericLiteral::isChar/isWideChar().

---
 src/libs/cplusplus/ResolveExpression.cpp | 44 +++++++++++++-----------
 src/shared/cplusplus/Literals.cpp        | 14 +-------
 src/shared/cplusplus/Literals.h          |  2 --
 3 files changed, 25 insertions(+), 35 deletions(-)

diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp
index 3f145979f3b..aadc1f5273a 100644
--- a/src/libs/cplusplus/ResolveExpression.cpp
+++ b/src/libs/cplusplus/ResolveExpression.cpp
@@ -254,32 +254,36 @@ bool ResolveExpression::visit(SizeofExpressionAST *)
 
 bool ResolveExpression::visit(NumericLiteralAST *ast)
 {
+    const Token &tk = tokenAt(ast->literal_token);
+
     Type *type = 0;
-    const NumericLiteral *literal = numericLiteral(ast->literal_token);
+    bool isUnsigned = false;
 
-    if (literal->isChar())
+    if (tk.is(T_CHAR_LITERAL))
         type = control()->integerType(IntegerType::Char);
-    else if (literal->isWideChar())
+    else if (tk.is(T_WIDE_CHAR_LITERAL))
         type = control()->integerType(IntegerType::WideChar);
-    else if (literal->isInt())
-        type = control()->integerType(IntegerType::Int);
-    else if (literal->isLong())
-        type = control()->integerType(IntegerType::Long);
-    else if (literal->isLongLong())
-        type = control()->integerType(IntegerType::LongLong);
-    else if (literal->isFloat())
-        type = control()->floatType(FloatType::Float);
-    else if (literal->isDouble())
-        type = control()->floatType(FloatType::Double);
-    else if (literal->isLongDouble())
-        type = control()->floatType(FloatType::LongDouble);
-    else
-        type = control()->integerType(IntegerType::Int);
+    else if (const NumericLiteral *literal = numericLiteral(ast->literal_token)) {
+        isUnsigned = literal->isUnsigned();
+
+        if (literal->isInt())
+            type = control()->integerType(IntegerType::Int);
+        else if (literal->isLong())
+            type = control()->integerType(IntegerType::Long);
+        else if (literal->isLongLong())
+            type = control()->integerType(IntegerType::LongLong);
+        else if (literal->isFloat())
+            type = control()->floatType(FloatType::Float);
+        else if (literal->isDouble())
+            type = control()->floatType(FloatType::Double);
+        else if (literal->isLongDouble())
+            type = control()->floatType(FloatType::LongDouble);
+        else
+            type = control()->integerType(IntegerType::Int);
+    }
 
     FullySpecifiedType ty(type);
-    if (literal->isUnsigned())
-        ty.setUnsigned(true);
-
+    ty.setUnsigned(isUnsigned);
     addResult(ty, _scope);
     return false;
 }
diff --git a/src/shared/cplusplus/Literals.cpp b/src/shared/cplusplus/Literals.cpp
index a90d82572b5..d56f937c482 100644
--- a/src/shared/cplusplus/Literals.cpp
+++ b/src/shared/cplusplus/Literals.cpp
@@ -118,8 +118,6 @@ StringLiteral::~StringLiteral()
 
 ////////////////////////////////////////////////////////////////////////////////
 enum {
-    NumericLiteralIsChar,
-    NumericLiteralIsWideChar,
     NumericLiteralIsInt,
     NumericLiteralIsFloat,
     NumericLiteralIsDouble,
@@ -133,11 +131,7 @@ NumericLiteral::NumericLiteral(const char *chars, unsigned size)
 {
     f._type = NumericLiteralIsInt;
 
-    if (chars[0] == '\'') {
-        f._type = NumericLiteralIsChar;
-    } else if (size > 1 && chars[0] == 'L' && chars[1] == '\'') {
-        f._type = NumericLiteralIsWideChar;
-    } else if (size > 1 && chars[0] == '0' && (chars[1] == 'x' || chars[1] == 'X')) {
+    if (size > 1 && chars[0] == '0' && (chars[1] == 'x' || chars[1] == 'X')) {
         f._isHex = true;
     } else {
         const char *begin = chars;
@@ -192,12 +186,6 @@ bool NumericLiteral::isHex() const
 bool NumericLiteral::isUnsigned() const
 { return f._isUnsigned; }
 
-bool NumericLiteral::isChar() const
-{ return f._type == NumericLiteralIsChar; }
-
-bool NumericLiteral::isWideChar() const
-{ return f._type == NumericLiteralIsWideChar; }
-
 bool NumericLiteral::isInt() const
 { return f._type == NumericLiteralIsInt; }
 
diff --git a/src/shared/cplusplus/Literals.h b/src/shared/cplusplus/Literals.h
index f9653b8ca25..afe9bae2e16 100644
--- a/src/shared/cplusplus/Literals.h
+++ b/src/shared/cplusplus/Literals.h
@@ -104,8 +104,6 @@ public:
     NumericLiteral(const char *chars, unsigned size);
     virtual ~NumericLiteral();
 
-    bool isChar() const;
-    bool isWideChar() const;
     bool isInt() const;
     bool isFloat() const;
     bool isDouble() const;
-- 
GitLab