From 4b18c3ff40a21a8fa87ab95a905f1d77a79dae43 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Tue, 3 Jul 2012 02:24:52 +0000 Subject: Share ConvertUTF8toWide() between Lex and CodeGen. llvm-svn: 159634 --- clang/lib/CodeGen/CGExpr.cpp | 39 ++------------------------------------- 1 file changed, 2 insertions(+), 37 deletions(-) (limited to 'clang/lib/CodeGen') diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index 5f708d7a73f..7fbe0d02b5a 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -1732,47 +1732,12 @@ GetAddrOfConstantWideString(StringRef Str, return GV; } -// FIXME: Mostly copied from StringLiteralParser::CopyStringFragment static void ConvertUTF8ToWideString(unsigned CharByteWidth, StringRef Source, SmallString<32>& Target) { Target.resize(CharByteWidth * (Source.size() + 1)); char* ResultPtr = &Target[0]; - - assert(CharByteWidth==1 || CharByteWidth==2 || CharByteWidth==4); - ConversionResult result = conversionOK; - // Copy the character span over. - if (CharByteWidth == 1) { - if (!isLegalUTF8String(reinterpret_cast(&*Source.begin()), - reinterpret_cast(&*Source.end()))) - result = sourceIllegal; - memcpy(ResultPtr, Source.data(), Source.size()); - ResultPtr += Source.size(); - } else if (CharByteWidth == 2) { - UTF8 const *sourceStart = (UTF8 const *)Source.data(); - // FIXME: Make the type of the result buffer correct instead of - // using reinterpret_cast. - UTF16 *targetStart = reinterpret_cast(ResultPtr); - ConversionFlags flags = strictConversion; - result = ConvertUTF8toUTF16( - &sourceStart,sourceStart + Source.size(), - &targetStart,targetStart + 2*Source.size(),flags); - if (result==conversionOK) - ResultPtr = reinterpret_cast(targetStart); - } else if (CharByteWidth == 4) { - UTF8 const *sourceStart = (UTF8 const *)Source.data(); - // FIXME: Make the type of the result buffer correct instead of - // using reinterpret_cast. - UTF32 *targetStart = reinterpret_cast(ResultPtr); - ConversionFlags flags = strictConversion; - result = ConvertUTF8toUTF32( - &sourceStart,sourceStart + Source.size(), - &targetStart,targetStart + 4*Source.size(),flags); - if (result==conversionOK) - ResultPtr = reinterpret_cast(targetStart); - } - assert((result != targetExhausted) - && "ConvertUTF8toUTFXX exhausted target buffer"); - assert(result == conversionOK); + bool success = ConvertUTF8toWide(CharByteWidth, Source, ResultPtr); + assert(success); Target.resize(ResultPtr - &Target[0]); } -- cgit v1.2.3