1717#include " clang/Basic/CharInfo.h"
1818#include " clang/Basic/LLVM.h"
1919#include " clang/Basic/TokenKinds.h"
20+ #include " clang/Lex/LiteralConverter.h"
2021#include " llvm/ADT/APFloat.h"
2122#include " llvm/ADT/ArrayRef.h"
2223#include " llvm/ADT/SmallString.h"
2324#include " llvm/ADT/StringRef.h"
25+ #include " llvm/Support/CharSet.h"
2426#include " llvm/Support/DataTypes.h"
2527
2628namespace clang {
@@ -233,6 +235,7 @@ class StringLiteralParser {
233235 const LangOptions &Features;
234236 const TargetInfo &Target;
235237 DiagnosticsEngine *Diags;
238+ LiteralConverter *LiteralConv;
236239
237240 unsigned MaxTokenLength;
238241 unsigned SizeBound;
@@ -246,18 +249,19 @@ class StringLiteralParser {
246249 StringLiteralEvalMethod EvalMethod;
247250
248251public:
249- StringLiteralParser (ArrayRef<Token> StringToks, Preprocessor &PP,
250- StringLiteralEvalMethod StringMethod =
251- StringLiteralEvalMethod::Evaluated);
252+ StringLiteralParser (
253+ ArrayRef<Token> StringToks, Preprocessor &PP,
254+ StringLiteralEvalMethod StringMethod = StringLiteralEvalMethod::Evaluated,
255+ ConversionAction Action = ToExecCharset);
252256 StringLiteralParser (ArrayRef<Token> StringToks, const SourceManager &sm,
253257 const LangOptions &features, const TargetInfo &target,
254258 DiagnosticsEngine *diags = nullptr )
255259 : SM(sm), Features(features), Target(target), Diags(diags),
256- MaxTokenLength ( 0 ), SizeBound (0 ), CharByteWidth (0 ), Kind(tok::unknown ),
257- ResultPtr(ResultBuf.data()),
260+ LiteralConv ( nullptr ), MaxTokenLength (0 ), SizeBound (0 ), CharByteWidth( 0 ),
261+ Kind(tok::unknown), ResultPtr(ResultBuf.data()),
258262 EvalMethod(StringLiteralEvalMethod::Evaluated), hadError(false ),
259263 Pascal(false ) {
260- init (StringToks);
264+ init (StringToks, NoConversion );
261265 }
262266
263267 bool hadError;
@@ -305,7 +309,7 @@ class StringLiteralParser {
305309 static bool isValidUDSuffix (const LangOptions &LangOpts, StringRef Suffix);
306310
307311private:
308- void init (ArrayRef<Token> StringToks);
312+ void init (ArrayRef<Token> StringToks, ConversionAction Action );
309313 bool CopyStringFragment (const Token &Tok, const char *TokBegin,
310314 StringRef Fragment);
311315 void DiagnoseLexingError (SourceLocation Loc);
0 commit comments