Update references to UTF* types and functions to match llvm r282822.

The content of LLVM's "Support/ConvertUTF.h" header was moved into the
"llvm" namespace. Update this code to match.
This commit is contained in:
Bob Wilson
2016-10-13 11:52:25 -07:00
parent b9d1b49c33
commit c08a96a880
5 changed files with 80 additions and 75 deletions

View File

@@ -491,17 +491,17 @@ bool TypeTransformContext::isPrintingSynthesizedExtension() const {
std::string ASTPrinter::sanitizeUtf8(StringRef Text) { std::string ASTPrinter::sanitizeUtf8(StringRef Text) {
llvm::SmallString<256> Builder; llvm::SmallString<256> Builder;
Builder.reserve(Text.size()); Builder.reserve(Text.size());
const UTF8* Data = reinterpret_cast<const UTF8*>(Text.begin()); const llvm::UTF8* Data = reinterpret_cast<const llvm::UTF8*>(Text.begin());
const UTF8* End = reinterpret_cast<const UTF8*>(Text.end()); const llvm::UTF8* End = reinterpret_cast<const llvm::UTF8*>(Text.end());
StringRef Replacement = "\ufffd"; StringRef Replacement = "\ufffd";
while (Data < End) { while (Data < End) {
auto Step = getNumBytesForUTF8(*Data); auto Step = llvm::getNumBytesForUTF8(*Data);
if (Data + Step > End) { if (Data + Step > End) {
Builder.append(Replacement); Builder.append(Replacement);
break; break;
} }
if (isLegalUTF8Sequence(Data, Data + Step)) { if (llvm::isLegalUTF8Sequence(Data, Data + Step)) {
Builder.append(Data, Data + Step); Builder.append(Data, Data + Step);
} else { } else {

View File

@@ -55,12 +55,12 @@ raw_ostream &llvm::operator<<(raw_ostream &OS, swift::ObjCSelector S) {
bool Identifier::isOperatorSlow() const { bool Identifier::isOperatorSlow() const {
StringRef data = str(); StringRef data = str();
auto *s = reinterpret_cast<UTF8 const *>(data.begin()), auto *s = reinterpret_cast<llvm::UTF8 const *>(data.begin()),
*end = reinterpret_cast<UTF8 const *>(data.end()); *end = reinterpret_cast<llvm::UTF8 const *>(data.end());
UTF32 codePoint; llvm::UTF32 codePoint;
ConversionResult res = llvm::convertUTF8Sequence(&s, end, &codePoint, llvm::ConversionResult res =
strictConversion); llvm::convertUTF8Sequence(&s, end, &codePoint, llvm::strictConversion);
assert(res == conversionOK && "invalid UTF-8 in identifier?!"); assert(res == llvm::conversionOK && "invalid UTF-8 in identifier?!");
(void)res; (void)res;
return !empty() && isOperatorStartCodePoint(codePoint); return !empty() && isOperatorStartCodePoint(codePoint);
} }

View File

@@ -22,14 +22,15 @@ StringRef swift::unicode::extractFirstExtendedGraphemeCluster(StringRef S) {
if (S.empty()) if (S.empty())
return StringRef(); return StringRef();
const UTF8 *SourceStart = reinterpret_cast<const UTF8 *>(S.data()); const llvm::UTF8 *SourceStart =
reinterpret_cast<const llvm::UTF8 *>(S.data());
const UTF8 *SourceNext = SourceStart; const llvm::UTF8 *SourceNext = SourceStart;
UTF32 C[2]; llvm::UTF32 C[2];
UTF32 *TargetStart = C; llvm::UTF32 *TargetStart = C;
ConvertUTF8toUTF32(&SourceNext, SourceStart + S.size(), &TargetStart, C + 1, ConvertUTF8toUTF32(&SourceNext, SourceStart + S.size(), &TargetStart, C + 1,
lenientConversion); llvm::lenientConversion);
if (TargetStart == C) { if (TargetStart == C) {
// The source string contains an ill-formed subsequence at the end. // The source string contains an ill-formed subsequence at the end.
return S; return S;
@@ -42,7 +43,7 @@ StringRef swift::unicode::extractFirstExtendedGraphemeCluster(StringRef S) {
size_t C1Offset = SourceNext - SourceStart; size_t C1Offset = SourceNext - SourceStart;
ConvertUTF8toUTF32(&SourceNext, SourceStart + S.size(), &TargetStart, C + 2, ConvertUTF8toUTF32(&SourceNext, SourceStart + S.size(), &TargetStart, C + 2,
lenientConversion); llvm::lenientConversion);
if (TargetStart == C + 1) { if (TargetStart == C + 1) {
// End of source string or the source string contains an ill-formed // End of source string or the source string contains an ill-formed
@@ -65,14 +66,15 @@ static bool extractFirstUnicodeScalarImpl(StringRef S, unsigned &Scalar) {
if (S.empty()) if (S.empty())
return false; return false;
const UTF8 *SourceStart = reinterpret_cast<const UTF8 *>(S.data()); const llvm::UTF8 *SourceStart =
reinterpret_cast<const llvm::UTF8 *>(S.data());
const UTF8 *SourceNext = SourceStart; const llvm::UTF8 *SourceNext = SourceStart;
UTF32 C; llvm::UTF32 C;
UTF32 *TargetStart = &C; llvm::UTF32 *TargetStart = &C;
ConvertUTF8toUTF32(&SourceNext, SourceStart + S.size(), &TargetStart, ConvertUTF8toUTF32(&SourceNext, SourceStart + S.size(), &TargetStart,
TargetStart + 1, lenientConversion); TargetStart + 1, llvm::lenientConversion);
if (TargetStart == &C) { if (TargetStart == &C) {
// The source string contains an ill-formed subsequence at the end. // The source string contains an ill-formed subsequence at the end.
return false; return false;
@@ -98,13 +100,14 @@ unsigned swift::unicode::extractFirstUnicodeScalar(StringRef S) {
uint64_t swift::unicode::getUTF16Length(StringRef Str) { uint64_t swift::unicode::getUTF16Length(StringRef Str) {
uint64_t Length; uint64_t Length;
// Transcode the string to UTF-16 to get its length. // Transcode the string to UTF-16 to get its length.
SmallVector<UTF16, 128> buffer(Str.size() + 1); // +1 for ending nulls. SmallVector<llvm::UTF16, 128> buffer(Str.size() + 1); // +1 for ending nulls.
const UTF8 *fromPtr = (const UTF8 *) Str.data(); const llvm::UTF8 *fromPtr = (const llvm::UTF8 *) Str.data();
UTF16 *toPtr = &buffer[0]; llvm::UTF16 *toPtr = &buffer[0];
ConversionResult Result = ConvertUTF8toUTF16(&fromPtr, fromPtr + Str.size(), llvm::ConversionResult Result =
&toPtr, toPtr + Str.size(), ConvertUTF8toUTF16(&fromPtr, fromPtr + Str.size(),
strictConversion); &toPtr, toPtr + Str.size(),
assert(Result == conversionOK && llvm::strictConversion);
assert(Result == llvm::conversionOK &&
"UTF-8 encoded string cannot be converted into UTF-16 encoding"); "UTF-8 encoded string cannot be converted into UTF-16 encoding");
(void)Result; (void)Result;

View File

@@ -2965,19 +2965,19 @@ llvm::Constant *IRGenModule::getAddrOfGlobalUTF16String(StringRef utf8) {
if (entry) return entry; if (entry) return entry;
// If not, first transcode it to UTF16. // If not, first transcode it to UTF16.
SmallVector<UTF16, 128> buffer(utf8.size() + 1); // +1 for ending nulls. SmallVector<llvm::UTF16, 128> buffer(utf8.size() + 1); // +1 for ending nulls.
const UTF8 *fromPtr = (const UTF8 *) utf8.data(); const llvm::UTF8 *fromPtr = (const llvm::UTF8 *) utf8.data();
UTF16 *toPtr = &buffer[0]; llvm::UTF16 *toPtr = &buffer[0];
(void) ConvertUTF8toUTF16(&fromPtr, fromPtr + utf8.size(), (void) ConvertUTF8toUTF16(&fromPtr, fromPtr + utf8.size(),
&toPtr, toPtr + utf8.size(), &toPtr, toPtr + utf8.size(),
strictConversion); llvm::strictConversion);
// The length of the transcoded string in UTF-8 code points. // The length of the transcoded string in UTF-8 code points.
size_t utf16Length = toPtr - &buffer[0]; size_t utf16Length = toPtr - &buffer[0];
// Null-terminate the UTF-16 string. // Null-terminate the UTF-16 string.
*toPtr = 0; *toPtr = 0;
ArrayRef<UTF16> utf16(&buffer[0], utf16Length + 1); ArrayRef<llvm::UTF16> utf16(&buffer[0], utf16Length + 1);
auto init = llvm::ConstantDataArray::get(LLVMContext, utf16); auto init = llvm::ConstantDataArray::get(LLVMContext, utf16);
auto global = new llvm::GlobalVariable(Module, init->getType(), true, auto global = new llvm::GlobalVariable(Module, init->getType(), true,

View File

@@ -76,56 +76,58 @@ class ConvertForWcharSize;
template<> template<>
class ConvertForWcharSize<2> { class ConvertForWcharSize<2> {
public: public:
static ConversionResult ConvertFromUTF8(const char** sourceStart, static llvm::ConversionResult ConvertFromUTF8(const char** sourceStart,
const char* sourceEnd, const char* sourceEnd,
wchar_t** targetStart, wchar_t** targetStart,
wchar_t* targetEnd, wchar_t* targetEnd,
ConversionFlags flags) { llvm::ConversionFlags flags) {
return ConvertUTF8toUTF16(reinterpret_cast<const UTF8**>(sourceStart), return ConvertUTF8toUTF16(reinterpret_cast<const llvm::UTF8**>(sourceStart),
reinterpret_cast<const UTF8*>(sourceEnd), reinterpret_cast<const llvm::UTF8*>(sourceEnd),
reinterpret_cast<UTF16**>(targetStart), reinterpret_cast<llvm::UTF16**>(targetStart),
reinterpret_cast<UTF16*>(targetEnd), reinterpret_cast<llvm::UTF16*>(targetEnd),
flags); flags);
} }
static ConversionResult ConvertToUTF8(const wchar_t** sourceStart, static llvm::ConversionResult ConvertToUTF8(const wchar_t** sourceStart,
const wchar_t* sourceEnd, const wchar_t* sourceEnd,
char** targetStart, char** targetStart,
char* targetEnd, char* targetEnd,
ConversionFlags flags) { llvm::ConversionFlags flags) {
return ConvertUTF16toUTF8(reinterpret_cast<const UTF16**>(sourceStart), return ConvertUTF16toUTF8(
reinterpret_cast<const UTF16*>(sourceEnd), reinterpret_cast<const llvm::UTF16**>(sourceStart),
reinterpret_cast<UTF8**>(targetStart), reinterpret_cast<const llvm::UTF16*>(sourceEnd),
reinterpret_cast<UTF8*>(targetEnd), reinterpret_cast<llvm::UTF8**>(targetStart),
flags); reinterpret_cast<llvm::UTF8*>(targetEnd),
flags);
} }
}; };
template<> template<>
class ConvertForWcharSize<4> { class ConvertForWcharSize<4> {
public: public:
static ConversionResult ConvertFromUTF8(const char** sourceStart, static llvm::ConversionResult ConvertFromUTF8(const char** sourceStart,
const char* sourceEnd, const char* sourceEnd,
wchar_t** targetStart, wchar_t** targetStart,
wchar_t* targetEnd, wchar_t* targetEnd,
ConversionFlags flags) { llvm::ConversionFlags flags) {
return ConvertUTF8toUTF32(reinterpret_cast<const UTF8**>(sourceStart), return ConvertUTF8toUTF32(reinterpret_cast<const llvm::UTF8**>(sourceStart),
reinterpret_cast<const UTF8*>(sourceEnd), reinterpret_cast<const llvm::UTF8*>(sourceEnd),
reinterpret_cast<UTF32**>(targetStart), reinterpret_cast<llvm::UTF32**>(targetStart),
reinterpret_cast<UTF32*>(targetEnd), reinterpret_cast<llvm::UTF32*>(targetEnd),
flags); flags);
} }
static ConversionResult ConvertToUTF8(const wchar_t** sourceStart, static llvm::ConversionResult ConvertToUTF8(const wchar_t** sourceStart,
const wchar_t* sourceEnd, const wchar_t* sourceEnd,
char** targetStart, char** targetStart,
char* targetEnd, char* targetEnd,
ConversionFlags flags) { llvm::ConversionFlags flags) {
return ConvertUTF32toUTF8(reinterpret_cast<const UTF32**>(sourceStart), return ConvertUTF32toUTF8(
reinterpret_cast<const UTF32*>(sourceEnd), reinterpret_cast<const llvm::UTF32**>(sourceStart),
reinterpret_cast<UTF8**>(targetStart), reinterpret_cast<const llvm::UTF32*>(sourceEnd),
reinterpret_cast<UTF8*>(targetEnd), reinterpret_cast<llvm::UTF8**>(targetStart),
flags); reinterpret_cast<llvm::UTF8*>(targetEnd),
flags);
} }
}; };
@@ -140,8 +142,8 @@ static void convertFromUTF8(llvm::StringRef utf8,
wchar_t *wide_begin = out.end(); wchar_t *wide_begin = out.end();
auto res = Convert::ConvertFromUTF8(&utf8_begin, utf8.end(), auto res = Convert::ConvertFromUTF8(&utf8_begin, utf8.end(),
&wide_begin, out.data() + reserve, &wide_begin, out.data() + reserve,
lenientConversion); llvm::lenientConversion);
assert(res == conversionOK && "utf8-to-wide conversion failed!"); assert(res == llvm::conversionOK && "utf8-to-wide conversion failed!");
(void)res; (void)res;
out.set_size(wide_begin - out.begin()); out.set_size(wide_begin - out.begin());
} }
@@ -154,8 +156,8 @@ static void convertToUTF8(llvm::ArrayRef<wchar_t> wide,
char *utf8_begin = out.end(); char *utf8_begin = out.end();
auto res = Convert::ConvertToUTF8(&wide_begin, wide.end(), auto res = Convert::ConvertToUTF8(&wide_begin, wide.end(),
&utf8_begin, out.data() + reserve, &utf8_begin, out.data() + reserve,
lenientConversion); llvm::lenientConversion);
assert(res == conversionOK && "wide-to-utf8 conversion failed!"); assert(res == llvm::conversionOK && "wide-to-utf8 conversion failed!");
(void)res; (void)res;
out.set_size(utf8_begin - out.begin()); out.set_size(utf8_begin - out.begin());
} }