As discussed on python-dev: this patch adds name mangling to
assure that extensions and interpreters using the Unicode APIs were compiled using the same Unicode width.
This commit is contained in:
parent
888fac020c
commit
b5ac6f62c7
@ -129,6 +129,156 @@ typedef unsigned short Py_UCS2;
|
||||
|
||||
typedef PY_UNICODE_TYPE Py_UNICODE;
|
||||
|
||||
/* --- UCS-2/UCS-4 Name Mangling ------------------------------------------ */
|
||||
|
||||
/* Unicode API names are mangled to assure that UCS-2 and UCS-4 builds
|
||||
produce different external names and thus cause import errors in
|
||||
case Python interpreters and extensions with mixed compiled in
|
||||
Unicode width assumptions are combined. */
|
||||
|
||||
#ifndef Py_UNICODE_WIDE
|
||||
|
||||
# define PyUnicode_AsASCIIString PyUnicodeUCS2_AsASCIIString
|
||||
# define PyUnicode_AsCharmapString PyUnicodeUCS2_AsCharmapString
|
||||
# define PyUnicode_AsEncodedString PyUnicodeUCS2_AsEncodedString
|
||||
# define PyUnicode_AsLatin1String PyUnicodeUCS2_AsLatin1String
|
||||
# define PyUnicode_AsRawUnicodeEscapeString PyUnicodeUCS2_AsRawUnicodeEscapeString
|
||||
# define PyUnicode_AsUTF16String PyUnicodeUCS2_AsUTF16String
|
||||
# define PyUnicode_AsUTF8String PyUnicodeUCS2_AsUTF8String
|
||||
# define PyUnicode_AsUnicode PyUnicodeUCS2_AsUnicode
|
||||
# define PyUnicode_AsUnicodeEscapeString PyUnicodeUCS2_AsUnicodeEscapeString
|
||||
# define PyUnicode_AsWideChar PyUnicodeUCS2_AsWideChar
|
||||
# define PyUnicode_Compare PyUnicodeUCS2_Compare
|
||||
# define PyUnicode_Concat PyUnicodeUCS2_Concat
|
||||
# define PyUnicode_Contains PyUnicodeUCS2_Contains
|
||||
# define PyUnicode_Count PyUnicodeUCS2_Count
|
||||
# define PyUnicode_Decode PyUnicodeUCS2_Decode
|
||||
# define PyUnicode_DecodeASCII PyUnicodeUCS2_DecodeASCII
|
||||
# define PyUnicode_DecodeCharmap PyUnicodeUCS2_DecodeCharmap
|
||||
# define PyUnicode_DecodeLatin1 PyUnicodeUCS2_DecodeLatin1
|
||||
# define PyUnicode_DecodeRawUnicodeEscape PyUnicodeUCS2_DecodeRawUnicodeEscape
|
||||
# define PyUnicode_DecodeUTF16 PyUnicodeUCS2_DecodeUTF16
|
||||
# define PyUnicode_DecodeUTF8 PyUnicodeUCS2_DecodeUTF8
|
||||
# define PyUnicode_DecodeUnicodeEscape PyUnicodeUCS2_DecodeUnicodeEscape
|
||||
# define PyUnicode_Encode PyUnicodeUCS2_Encode
|
||||
# define PyUnicode_EncodeASCII PyUnicodeUCS2_EncodeASCII
|
||||
# define PyUnicode_EncodeCharmap PyUnicodeUCS2_EncodeCharmap
|
||||
# define PyUnicode_EncodeDecimal PyUnicodeUCS2_EncodeDecimal
|
||||
# define PyUnicode_EncodeLatin1 PyUnicodeUCS2_EncodeLatin1
|
||||
# define PyUnicode_EncodeRawUnicodeEscape PyUnicodeUCS2_EncodeRawUnicodeEscape
|
||||
# define PyUnicode_EncodeUTF16 PyUnicodeUCS2_EncodeUTF16
|
||||
# define PyUnicode_EncodeUTF8 PyUnicodeUCS2_EncodeUTF8
|
||||
# define PyUnicode_EncodeUnicodeEscape PyUnicodeUCS2_EncodeUnicodeEscape
|
||||
# define PyUnicode_Find PyUnicodeUCS2_Find
|
||||
# define PyUnicode_Format PyUnicodeUCS2_Format
|
||||
# define PyUnicode_FromEncodedObject PyUnicodeUCS2_FromEncodedObject
|
||||
# define PyUnicode_FromObject PyUnicodeUCS2_FromObject
|
||||
# define PyUnicode_FromUnicode PyUnicodeUCS2_FromUnicode
|
||||
# define PyUnicode_FromWideChar PyUnicodeUCS2_FromWideChar
|
||||
# define PyUnicode_GetDefaultEncoding PyUnicodeUCS2_GetDefaultEncoding
|
||||
# define PyUnicode_GetMax PyUnicodeUCS2_GetMax
|
||||
# define PyUnicode_GetSize PyUnicodeUCS2_GetSize
|
||||
# define PyUnicode_Join PyUnicodeUCS2_Join
|
||||
# define PyUnicode_Replace PyUnicodeUCS2_Replace
|
||||
# define PyUnicode_Resize PyUnicodeUCS2_Resize
|
||||
# define PyUnicode_SetDefaultEncoding PyUnicodeUCS2_SetDefaultEncoding
|
||||
# define PyUnicode_Split PyUnicodeUCS2_Split
|
||||
# define PyUnicode_Splitlines PyUnicodeUCS2_Splitlines
|
||||
# define PyUnicode_Tailmatch PyUnicodeUCS2_Tailmatch
|
||||
# define PyUnicode_Translate PyUnicodeUCS2_Translate
|
||||
# define PyUnicode_TranslateCharmap PyUnicodeUCS2_TranslateCharmap
|
||||
# define _PyUnicode_AsDefaultEncodedString _PyUnicodeUCS2_AsDefaultEncodedString
|
||||
# define _PyUnicode_Fini _PyUnicodeUCS2_Fini
|
||||
# define _PyUnicode_Init _PyUnicodeUCS2_Init
|
||||
# define _PyUnicode_IsAlpha _PyUnicodeUCS2_IsAlpha
|
||||
# define _PyUnicode_IsDecimalDigit _PyUnicodeUCS2_IsDecimalDigit
|
||||
# define _PyUnicode_IsDigit _PyUnicodeUCS2_IsDigit
|
||||
# define _PyUnicode_IsLinebreak _PyUnicodeUCS2_IsLinebreak
|
||||
# define _PyUnicode_IsLowercase _PyUnicodeUCS2_IsLowercase
|
||||
# define _PyUnicode_IsNumeric _PyUnicodeUCS2_IsNumeric
|
||||
# define _PyUnicode_IsTitlecase _PyUnicodeUCS2_IsTitlecase
|
||||
# define _PyUnicode_IsUppercase _PyUnicodeUCS2_IsUppercase
|
||||
# define _PyUnicode_IsWhitespace _PyUnicodeUCS2_IsWhitespace
|
||||
# define _PyUnicode_ToDecimalDigit _PyUnicodeUCS2_ToDecimalDigit
|
||||
# define _PyUnicode_ToDigit _PyUnicodeUCS2_ToDigit
|
||||
# define _PyUnicode_ToLowercase _PyUnicodeUCS2_ToLowercase
|
||||
# define _PyUnicode_ToNumeric _PyUnicodeUCS2_ToNumeric
|
||||
# define _PyUnicode_ToTitlecase _PyUnicodeUCS2_ToTitlecase
|
||||
# define _PyUnicode_ToUppercase _PyUnicodeUCS2_ToUppercase
|
||||
|
||||
#else
|
||||
|
||||
# define PyUnicode_AsASCIIString PyUnicodeUCS4_AsASCIIString
|
||||
# define PyUnicode_AsCharmapString PyUnicodeUCS4_AsCharmapString
|
||||
# define PyUnicode_AsEncodedString PyUnicodeUCS4_AsEncodedString
|
||||
# define PyUnicode_AsLatin1String PyUnicodeUCS4_AsLatin1String
|
||||
# define PyUnicode_AsRawUnicodeEscapeString PyUnicodeUCS4_AsRawUnicodeEscapeString
|
||||
# define PyUnicode_AsUTF16String PyUnicodeUCS4_AsUTF16String
|
||||
# define PyUnicode_AsUTF8String PyUnicodeUCS4_AsUTF8String
|
||||
# define PyUnicode_AsUnicode PyUnicodeUCS4_AsUnicode
|
||||
# define PyUnicode_AsUnicodeEscapeString PyUnicodeUCS4_AsUnicodeEscapeString
|
||||
# define PyUnicode_AsWideChar PyUnicodeUCS4_AsWideChar
|
||||
# define PyUnicode_Compare PyUnicodeUCS4_Compare
|
||||
# define PyUnicode_Concat PyUnicodeUCS4_Concat
|
||||
# define PyUnicode_Contains PyUnicodeUCS4_Contains
|
||||
# define PyUnicode_Count PyUnicodeUCS4_Count
|
||||
# define PyUnicode_Decode PyUnicodeUCS4_Decode
|
||||
# define PyUnicode_DecodeASCII PyUnicodeUCS4_DecodeASCII
|
||||
# define PyUnicode_DecodeCharmap PyUnicodeUCS4_DecodeCharmap
|
||||
# define PyUnicode_DecodeLatin1 PyUnicodeUCS4_DecodeLatin1
|
||||
# define PyUnicode_DecodeRawUnicodeEscape PyUnicodeUCS4_DecodeRawUnicodeEscape
|
||||
# define PyUnicode_DecodeUTF16 PyUnicodeUCS4_DecodeUTF16
|
||||
# define PyUnicode_DecodeUTF8 PyUnicodeUCS4_DecodeUTF8
|
||||
# define PyUnicode_DecodeUnicodeEscape PyUnicodeUCS4_DecodeUnicodeEscape
|
||||
# define PyUnicode_Encode PyUnicodeUCS4_Encode
|
||||
# define PyUnicode_EncodeASCII PyUnicodeUCS4_EncodeASCII
|
||||
# define PyUnicode_EncodeCharmap PyUnicodeUCS4_EncodeCharmap
|
||||
# define PyUnicode_EncodeDecimal PyUnicodeUCS4_EncodeDecimal
|
||||
# define PyUnicode_EncodeLatin1 PyUnicodeUCS4_EncodeLatin1
|
||||
# define PyUnicode_EncodeRawUnicodeEscape PyUnicodeUCS4_EncodeRawUnicodeEscape
|
||||
# define PyUnicode_EncodeUTF16 PyUnicodeUCS4_EncodeUTF16
|
||||
# define PyUnicode_EncodeUTF8 PyUnicodeUCS4_EncodeUTF8
|
||||
# define PyUnicode_EncodeUnicodeEscape PyUnicodeUCS4_EncodeUnicodeEscape
|
||||
# define PyUnicode_Find PyUnicodeUCS4_Find
|
||||
# define PyUnicode_Format PyUnicodeUCS4_Format
|
||||
# define PyUnicode_FromEncodedObject PyUnicodeUCS4_FromEncodedObject
|
||||
# define PyUnicode_FromObject PyUnicodeUCS4_FromObject
|
||||
# define PyUnicode_FromUnicode PyUnicodeUCS4_FromUnicode
|
||||
# define PyUnicode_FromWideChar PyUnicodeUCS4_FromWideChar
|
||||
# define PyUnicode_GetDefaultEncoding PyUnicodeUCS4_GetDefaultEncoding
|
||||
# define PyUnicode_GetMax PyUnicodeUCS4_GetMax
|
||||
# define PyUnicode_GetSize PyUnicodeUCS4_GetSize
|
||||
# define PyUnicode_Join PyUnicodeUCS4_Join
|
||||
# define PyUnicode_Replace PyUnicodeUCS4_Replace
|
||||
# define PyUnicode_Resize PyUnicodeUCS4_Resize
|
||||
# define PyUnicode_SetDefaultEncoding PyUnicodeUCS4_SetDefaultEncoding
|
||||
# define PyUnicode_Split PyUnicodeUCS4_Split
|
||||
# define PyUnicode_Splitlines PyUnicodeUCS4_Splitlines
|
||||
# define PyUnicode_Tailmatch PyUnicodeUCS4_Tailmatch
|
||||
# define PyUnicode_Translate PyUnicodeUCS4_Translate
|
||||
# define PyUnicode_TranslateCharmap PyUnicodeUCS4_TranslateCharmap
|
||||
# define _PyUnicode_AsDefaultEncodedString _PyUnicodeUCS4_AsDefaultEncodedString
|
||||
# define _PyUnicode_Fini _PyUnicodeUCS4_Fini
|
||||
# define _PyUnicode_Init _PyUnicodeUCS4_Init
|
||||
# define _PyUnicode_IsAlpha _PyUnicodeUCS4_IsAlpha
|
||||
# define _PyUnicode_IsDecimalDigit _PyUnicodeUCS4_IsDecimalDigit
|
||||
# define _PyUnicode_IsDigit _PyUnicodeUCS4_IsDigit
|
||||
# define _PyUnicode_IsLinebreak _PyUnicodeUCS4_IsLinebreak
|
||||
# define _PyUnicode_IsLowercase _PyUnicodeUCS4_IsLowercase
|
||||
# define _PyUnicode_IsNumeric _PyUnicodeUCS4_IsNumeric
|
||||
# define _PyUnicode_IsTitlecase _PyUnicodeUCS4_IsTitlecase
|
||||
# define _PyUnicode_IsUppercase _PyUnicodeUCS4_IsUppercase
|
||||
# define _PyUnicode_IsWhitespace _PyUnicodeUCS4_IsWhitespace
|
||||
# define _PyUnicode_ToDecimalDigit _PyUnicodeUCS4_ToDecimalDigit
|
||||
# define _PyUnicode_ToDigit _PyUnicodeUCS4_ToDigit
|
||||
# define _PyUnicode_ToLowercase _PyUnicodeUCS4_ToLowercase
|
||||
# define _PyUnicode_ToNumeric _PyUnicodeUCS4_ToNumeric
|
||||
# define _PyUnicode_ToTitlecase _PyUnicodeUCS4_ToTitlecase
|
||||
# define _PyUnicode_ToUppercase _PyUnicodeUCS4_ToUppercase
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/* --- Internal Unicode Operations ---------------------------------------- */
|
||||
|
||||
/* If you want Python to use the compiler's wctype.h functions instead
|
||||
|
Loading…
x
Reference in New Issue
Block a user