@@ -13,41 +13,48 @@ using namespace llvm;
1313
1414llvm::TextEncodingConverter *
1515LiteralConverter::getConverter (ConversionAction Action) {
16- if (Action == ToSystemEncoding )
16+ if (Action == CA_ToSystemEncoding )
1717 return ToSystemEncodingConverter;
18- else if (Action == ToExecEncoding )
18+ else if (Action == CA_ToExecEncoding )
1919 return ToExecEncodingConverter;
2020 else
2121 return nullptr ;
2222}
2323
24- void LiteralConverter::setConvertersFromOptions (
25- const clang::LangOptions &Opts, const clang::TargetInfo &TInfo,
26- clang::DiagnosticsEngine &Diags) {
24+ std::error_code
25+ LiteralConverter::setConvertersFromOptions (LiteralConverter &LiteralConv,
26+ const clang::LangOptions &Opts,
27+ const clang::TargetInfo &TInfo) {
2728 using namespace llvm ;
28- InternalEncoding = " UTF-8" ;
29- SystemEncoding = TInfo.getTriple ().getDefaultTextEncoding ();
30- ExecEncoding =
31- Opts.ExecEncoding .empty () ? InternalEncoding : Opts.ExecEncoding ;
29+ LiteralConv.InternalEncoding = " UTF-8" ;
30+ LiteralConv.SystemEncoding = TInfo.getTriple ().getDefaultNarrowTextEncoding ();
31+ LiteralConv.ExecEncoding = Opts.ExecEncoding .empty ()
32+ ? LiteralConv.InternalEncoding
33+ : Opts.ExecEncoding ;
34+
3235 // Create converter between internal and system encoding
33- if (InternalEncoding != SystemEncoding) {
36+ if (LiteralConv. InternalEncoding != LiteralConv. SystemEncoding ) {
3437 ErrorOr<TextEncodingConverter> ErrorOrConverter =
35- llvm::TextEncodingConverter::create (InternalEncoding, SystemEncoding);
36- if (!ErrorOrConverter)
37- return ;
38- ToSystemEncodingConverter =
39- new TextEncodingConverter (std::move (*ErrorOrConverter));
38+ llvm::TextEncodingConverter::create (LiteralConv.InternalEncoding ,
39+ LiteralConv.SystemEncoding );
40+ if (ErrorOrConverter) {
41+ LiteralConv.ToSystemEncodingConverter =
42+ new TextEncodingConverter (std::move (*ErrorOrConverter));
43+ } else
44+ return ErrorOrConverter.getError ();
4045 }
4146
4247 // Create converter between internal and exec encoding specified
4348 // in fexec-charset option.
44- if (InternalEncoding == ExecEncoding)
45- return ;
49+ if (LiteralConv. InternalEncoding == LiteralConv. ExecEncoding )
50+ return std::error_code () ;
4651 ErrorOr<TextEncodingConverter> ErrorOrConverter =
47- llvm::TextEncodingConverter::create (InternalEncoding, ExecEncoding);
48- if (!ErrorOrConverter)
49- Diags.Report (clang::diag::err_drv_invalid_value)
50- << " -fexec-charset" << ExecEncoding;
51- ToExecEncodingConverter =
52- new TextEncodingConverter (std::move (*ErrorOrConverter));
52+ llvm::TextEncodingConverter::create (LiteralConv.InternalEncoding ,
53+ LiteralConv.ExecEncoding );
54+ if (ErrorOrConverter) {
55+ LiteralConv.ToExecEncodingConverter =
56+ new TextEncodingConverter (std::move (*ErrorOrConverter));
57+ } else
58+ return ErrorOrConverter.getError ();
59+ return std::error_code ();
5360}
0 commit comments