diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-09-13 11:04:48 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-09-17 15:03:43 +0200 |
commit | 2fd3c8bd9c9ac9edbc2a6277901d2c056740c441 (patch) | |
tree | e8bfdda89f1ce2f62edc94ba4dd65433ede47306 /src/libs/cplusplus/ResolveExpression.cpp | |
parent | 0d0606a6d9dd5fda0874cd8cf3fd62c2e70f6788 (diff) | |
download | qt-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.cpp | 20 |
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); |