79 lines
2.7 KiB
Diff
79 lines
2.7 KiB
Diff
From 3e8b517a509ae043571d8d0b00625d8a03eb5d05 Mon Sep 17 00:00:00 2001
|
|
From: Xiang Xiao <xiaoxiang@xiaomi.com>
|
|
Date: Mon, 9 Nov 2020 21:45:57 +0800
|
|
Subject: [PATCH] [libcxx] Check _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE first in
|
|
__locale
|
|
|
|
just like what's done in __locale.cpp
|
|
|
|
Co-authored-by: Chao An <anchao@xiaomi.com>
|
|
|
|
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
|
|
|
|
Differential Revision: https://reviews.llvm.org/D91074
|
|
---
|
|
include/__locale | 40 +++++++++++++++++++++-------------------
|
|
1 file changed, 21 insertions(+), 19 deletions(-)
|
|
|
|
diff --git a/include/__locale libcxx/include/__locale
|
|
index 125adcf68c8..e973ce52646 100644
|
|
--- a/include/__locale
|
|
+++ libcxx/include/__locale
|
|
@@ -397,7 +397,26 @@ locale::operator()(const basic_string<_CharT, _Traits, _Allocator>& __x,
|
|
class _LIBCPP_TYPE_VIS ctype_base
|
|
{
|
|
public:
|
|
-#if defined(__GLIBC__)
|
|
+#if defined(_LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE)
|
|
+ typedef unsigned long mask;
|
|
+ static const mask space = 1<<0;
|
|
+ static const mask print = 1<<1;
|
|
+ static const mask cntrl = 1<<2;
|
|
+ static const mask upper = 1<<3;
|
|
+ static const mask lower = 1<<4;
|
|
+ static const mask alpha = 1<<5;
|
|
+ static const mask digit = 1<<6;
|
|
+ static const mask punct = 1<<7;
|
|
+ static const mask xdigit = 1<<8;
|
|
+ static const mask blank = 1<<9;
|
|
+#if defined(__BIONIC__)
|
|
+ // Historically this was a part of regex_traits rather than ctype_base. The
|
|
+ // historical value of the constant is preserved for ABI compatibility.
|
|
+ static const mask __regex_word = 0x8000;
|
|
+#else
|
|
+ static const mask __regex_word = 1<<10;
|
|
+#endif // defined(__BIONIC__)
|
|
+#elif defined(__GLIBC__)
|
|
typedef unsigned short mask;
|
|
static const mask space = _ISspace;
|
|
static const mask print = _ISprint;
|
|
@@ -486,24 +505,7 @@ public:
|
|
# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_ALPHA
|
|
# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_XDIGIT
|
|
#else
|
|
- typedef unsigned long mask;
|
|
- static const mask space = 1<<0;
|
|
- static const mask print = 1<<1;
|
|
- static const mask cntrl = 1<<2;
|
|
- static const mask upper = 1<<3;
|
|
- static const mask lower = 1<<4;
|
|
- static const mask alpha = 1<<5;
|
|
- static const mask digit = 1<<6;
|
|
- static const mask punct = 1<<7;
|
|
- static const mask xdigit = 1<<8;
|
|
- static const mask blank = 1<<9;
|
|
-#if defined(__BIONIC__)
|
|
- // Historically this was a part of regex_traits rather than ctype_base. The
|
|
- // historical value of the constant is preserved for ABI compatibility.
|
|
- static const mask __regex_word = 0x8000;
|
|
-#else
|
|
- static const mask __regex_word = 1<<10;
|
|
-#endif // defined(__BIONIC__)
|
|
+#error unkown classic_table, try _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE
|
|
#endif
|
|
static const mask alnum = alpha | digit;
|
|
static const mask graph = alnum | punct;
|
|
--
|
|
2.17.1
|
|
|