diff options
author | Alexander Kornienko <alexfh@google.com> | 2013-09-04 16:00:12 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2013-09-04 16:00:12 +0000 |
commit | 280e5eef43ecf2279ab78f132922920ed7ce7952 (patch) | |
tree | 1bb943229dfe4665f53171bc73b7a6898d24f338 /lib/Support/LocaleXlocale.inc | |
parent | 9127334dade7fa36cb5cb999fc116ceaa4f52ac9 (diff) | |
download | llvm-280e5eef43ecf2279ab78f132922920ed7ce7952.tar.gz llvm-280e5eef43ecf2279ab78f132922920ed7ce7952.tar.bz2 llvm-280e5eef43ecf2279ab78f132922920ed7ce7952.tar.xz |
Move generic isPrint and columnWidth implementations to a separate header/source to allow using both generic and system-dependent versions on win32.
Summary:
This is needed so we can use generic columnWidthUTF8 in clang-format on
win32 simultaneously with a separate system-dependent implementations of
isPrint/columnWidth in TextDiagnostic.cpp to avoid attempts to print Unicode
characters using narrow-character interfaces (which is not supported on Windows,
and we'll have to figure out how to handle this).
Reviewers: jordan_rose
Reviewed By: jordan_rose
CC: llvm-commits, klimek
Differential Revision: http://llvm-reviews.chandlerc.com/D1559
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189952 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/LocaleXlocale.inc')
-rw-r--r-- | lib/Support/LocaleXlocale.inc | 61 |
1 files changed, 0 insertions, 61 deletions
diff --git a/lib/Support/LocaleXlocale.inc b/lib/Support/LocaleXlocale.inc deleted file mode 100644 index 389fe3d1d4..0000000000 --- a/lib/Support/LocaleXlocale.inc +++ /dev/null @@ -1,61 +0,0 @@ -#include "llvm/ADT/SmallString.h" -#include "llvm/ADT/SmallVector.h" -#include "llvm/Support/ManagedStatic.h" -#include <cassert> -#include <xlocale.h> - - -namespace { - struct locale_holder { - locale_holder() - : l(newlocale(LC_CTYPE_MASK,"en_US.UTF-8",LC_GLOBAL_LOCALE)) - { - assert(NULL!=l); - } - ~locale_holder() { - freelocale(l); - } - - int mbswidth(llvm::SmallString<16> s) const { - // this implementation assumes no '\0' in s - assert(s.size()==strlen(s.c_str())); - - size_t size = mbstowcs_l(NULL,s.c_str(),0,l); - assert(size!=(size_t)-1); - if (size==0) - return 0; - llvm::SmallVector<wchar_t,200> ws(size); - size = mbstowcs_l(&ws[0],s.c_str(),ws.size(),l); - assert(ws.size()==size); - return wcswidth_l(&ws[0],ws.size(),l); - } - - int isprint(int c) const { - return iswprint_l(c,l); - } - - private: - - locale_t l; - }; - - llvm::ManagedStatic<locale_holder> l; -} - -namespace llvm { -namespace sys { -namespace locale { - -int columnWidth(StringRef s) { - int width = l->mbswidth(s); - assert(width>=0); - return width; -} - -bool isPrint(int c) { - return l->isprint(c); -} - -} -} -} |