diff options
-rw-r--r-- | Include/unicodeobject.h | 31 | ||||
-rw-r--r-- | Modules/sre.h | 4 | ||||
-rw-r--r-- | Objects/unicodeobject.c | 2 |
3 files changed, 25 insertions, 12 deletions
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h index f91a5a0..e330fd1 100644 --- a/Include/unicodeobject.h +++ b/Include/unicodeobject.h @@ -58,6 +58,19 @@ Copyright (c) Corporation for National Research Initiatives. /* --- Internal Unicode Format -------------------------------------------- */ +/* experimental UCS-4 support. enable at your own risk! */ +#undef USE_UCS4_STORAGE + +/* + * Use this typedef when you need to represent a UTF-16 surrogate pair + * as single unsigned integer. + */ +#if SIZEOF_INT >= 4 +typedef unsigned int Py_UCS4; +#elif SIZEOF_LONG >= 4 +typedef unsigned long Py_UCS4; +#endif + /* Set these flags if the platform has "wchar.h", "wctype.h" and the wchar_t type is a 16-bit unsigned type */ /* #define HAVE_WCHAR_H */ @@ -66,8 +79,8 @@ Copyright (c) Corporation for National Research Initiatives. /* Defaults for various platforms */ #ifndef HAVE_USABLE_WCHAR_T -/* Windows has a usable wchar_t type */ -# if defined(MS_WIN32) +/* Windows has a usable wchar_t type (unless we're using UCS-4) */ +# if defined(MS_WIN32) && !defined(USE_UCS4_STORAGE) # define HAVE_USABLE_WCHAR_T # endif @@ -105,19 +118,13 @@ typedef wchar_t Py_UNICODE; If a short is not 16 bits on your platform, you have to fix the typedef below, or the module initialization code will complain. */ +#ifdef USE_UCS4_STORAGE +typedef Py_UCS4 Py_UNICODE; +#else typedef unsigned short Py_UNICODE; - #endif -/* - * Use this typedef when you need to represent a UTF-16 surrogate pair - * as single unsigned integer. - */ -#if SIZEOF_INT >= 4 -typedef unsigned int Py_UCS4; -#elif SIZEOF_LONG >= 4 -typedef unsigned long Py_UCS4; -#endif +#endif /* --- Internal Unicode Operations ---------------------------------------- */ diff --git a/Modules/sre.h b/Modules/sre.h index bf58eb5..61a0208 100644 --- a/Modules/sre.h +++ b/Modules/sre.h @@ -14,7 +14,11 @@ #include "sre_constants.h" /* size of a code word (must be unsigned short or larger) */ +#ifdef USE_UCS4_STORAGE +#define SRE_CODE unsigned long +#else #define SRE_CODE unsigned short +#endif typedef struct { PyObject_VAR_HEAD diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index c62f65b..742c770 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -5282,9 +5282,11 @@ void _PyUnicode_Init(void) int i; /* Doublecheck the configuration... */ +#ifndef USE_UCS4_STORAGE if (sizeof(Py_UNICODE) != 2) Py_FatalError("Unicode configuration error: " "sizeof(Py_UNICODE) != 2 bytes"); +#endif /* Init the implementation */ unicode_freelist = NULL; |