summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/ResolveExpression.cpp
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2013-09-13 11:04:48 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2013-09-17 15:03:43 +0200
commit2fd3c8bd9c9ac9edbc2a6277901d2c056740c441 (patch)
treee8bfdda89f1ce2f62edc94ba4dd65433ede47306 /src/libs/cplusplus/ResolveExpression.cpp
parent0d0606a6d9dd5fda0874cd8cf3fd62c2e70f6788 (diff)
downloadqt-creator-2fd3c8bd9c9ac9edbc2a6277901d2c056740c441.tar.gz
C++: fix ResolveExpression for string literals
ResolveExpression now correctly handles wide and UTF-n string literals. Change-Id: Ide2373ffdc4c9e1e4b53236a8e2782653d15e687 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/libs/cplusplus/ResolveExpression.cpp')
-rw-r--r--src/libs/cplusplus/ResolveExpression.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp
index 79f10f5f46..90b9624860 100644
--- a/src/libs/cplusplus/ResolveExpression.cpp
+++ b/src/libs/cplusplus/ResolveExpression.cpp
@@ -386,9 +386,25 @@ bool ResolveExpression::visit(NestedExpressionAST *ast)
return false;
}
-bool ResolveExpression::visit(StringLiteralAST *)
+bool ResolveExpression::visit(StringLiteralAST *ast)
{
- FullySpecifiedType charTy = control()->integerType(IntegerType::Char);
+ const Token &tk = tokenAt(ast->literal_token);
+ int intId;
+ switch (tk.kind()) {
+ case T_WIDE_STRING_LITERAL:
+ intId = IntegerType::WideChar;
+ break;
+ case T_UTF16_STRING_LITERAL:
+ intId = IntegerType::Char16;
+ break;
+ case T_UTF32_STRING_LITERAL:
+ intId = IntegerType::Char32;
+ break;
+ default:
+ intId = IntegerType::Char;
+ break;
+ }
+ FullySpecifiedType charTy = control()->integerType(intId);
charTy.setConst(true);
FullySpecifiedType ty(control()->pointerType(charTy));
addResult(ty, _scope);