This patch changes ToLiteralEncodingConverter from a raw pointer to a unique_ptr
47 lines
1.5 KiB
C++
47 lines
1.5 KiB
C++
//===--- TextEncoding.cpp -------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "clang/Lex/TextEncoding.h"
|
|
#include "clang/Basic/DiagnosticDriver.h"
|
|
#include "llvm/Support/TextEncoding.h"
|
|
|
|
using namespace clang;
|
|
|
|
llvm::TextEncodingConverter *
|
|
TextEncoding::getConverter(ConversionAction Action) const {
|
|
switch (Action) {
|
|
case CA_ToLiteralEncoding:
|
|
return ToLiteralEncodingConverter.get();
|
|
default:
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
std::error_code
|
|
TextEncoding::setConvertersFromOptions(TextEncoding &TE,
|
|
const clang::LangOptions &Opts) {
|
|
using namespace llvm;
|
|
|
|
const char *UTF8 = "UTF-8";
|
|
TE.LiteralEncoding =
|
|
Opts.LiteralEncoding.empty() ? UTF8 : Opts.LiteralEncoding.c_str();
|
|
|
|
// Create converter between internal and literal encoding specified
|
|
// in fexec-charset option.
|
|
if (TE.LiteralEncoding == UTF8)
|
|
return std::error_code();
|
|
ErrorOr<TextEncodingConverter> ErrorOrConverter =
|
|
llvm::TextEncodingConverter::create(UTF8, TE.LiteralEncoding);
|
|
if (ErrorOrConverter)
|
|
TE.ToLiteralEncodingConverter =
|
|
std::make_unique<TextEncodingConverter>(std::move(*ErrorOrConverter));
|
|
else
|
|
return ErrorOrConverter.getError();
|
|
return std::error_code();
|
|
}
|