diff --git a/Include/bytes_methods.h b/Include/bytes_methods.h index 0938446e1f2..d0a6242d7a6 100644 --- a/Include/bytes_methods.h +++ b/Include/bytes_methods.h @@ -38,41 +38,6 @@ extern const char _Py_capitalize__doc__[]; extern const char _Py_swapcase__doc__[]; extern const char _Py_maketrans__doc__[]; -/* These are left in for backward compatibility and will be removed - in 2.8/3.2 */ -#define ISLOWER(c) Py_ISLOWER(c) -#define ISUPPER(c) Py_ISUPPER(c) -#define ISALPHA(c) Py_ISALPHA(c) -#define ISDIGIT(c) Py_ISDIGIT(c) -#define ISXDIGIT(c) Py_ISXDIGIT(c) -#define ISALNUM(c) Py_ISALNUM(c) -#define ISSPACE(c) Py_ISSPACE(c) - -#undef islower -#define islower(c) undefined_islower(c) -#undef isupper -#define isupper(c) undefined_isupper(c) -#undef isalpha -#define isalpha(c) undefined_isalpha(c) -#undef isdigit -#define isdigit(c) undefined_isdigit(c) -#undef isxdigit -#define isxdigit(c) undefined_isxdigit(c) -#undef isalnum -#define isalnum(c) undefined_isalnum(c) -#undef isspace -#define isspace(c) undefined_isspace(c) - -/* These are left in for backward compatibility and will be removed - in 2.8/3.2 */ -#define TOLOWER(c) Py_TOLOWER(c) -#define TOUPPER(c) Py_TOUPPER(c) - -#undef tolower -#define tolower(c) undefined_tolower(c) -#undef toupper -#define toupper(c) undefined_toupper(c) - /* this is needed because some docs are shared from the .o, not static */ #define PyDoc_STRVAR_shared(name,str) const char name[] = PyDoc_STR(str) diff --git a/Misc/NEWS b/Misc/NEWS index de5d57303e5..19106512199 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -252,6 +252,10 @@ Extensions C-API ----- +- Issue #10288: The deprecated family of "char"-handling macros + (ISLOWER()/ISUPPER()/etc) have now been removed: use Py_ISLOWER() etc + instead. + - Issue #9778: Hash values are now always the size of pointers. A new Py_hash_t type has been introduced. diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index 2b965c37aed..382e9110081 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -178,7 +178,7 @@ PyBytes_FromFormatV(const char *format, va_list vargs) for (f = format; *f; f++) { if (*f == '%') { const char* p = f; - while (*++f && *f != '%' && !ISALPHA(*f)) + while (*++f && *f != '%' && !Py_ISALPHA(*f)) ; /* skip the 'l' or 'z' in {%ld, %zd, %lu, %zu} since @@ -247,15 +247,15 @@ PyBytes_FromFormatV(const char *format, va_list vargs) /* parse the width.precision part (we're only interested in the precision value, if any) */ n = 0; - while (ISDIGIT(*f)) + while (Py_ISDIGIT(*f)) n = (n*10) + *f++ - '0'; if (*f == '.') { f++; n = 0; - while (ISDIGIT(*f)) + while (Py_ISDIGIT(*f)) n = (n*10) + *f++ - '0'; } - while (*f && *f != '%' && !ISALPHA(*f)) + while (*f && *f != '%' && !Py_ISALPHA(*f)) f++; /* handle the long flag, but only for %ld and %lu. others can be added when necessary. */ @@ -446,22 +446,22 @@ PyObject *PyBytes_DecodeEscape(const char *s, *p++ = c; break; case 'x': - if (s+1 < end && ISXDIGIT(s[0]) && ISXDIGIT(s[1])) { + if (s+1 < end && Py_ISXDIGIT(s[0]) && Py_ISXDIGIT(s[1])) { unsigned int x = 0; c = Py_CHARMASK(*s); s++; - if (ISDIGIT(c)) + if (Py_ISDIGIT(c)) x = c - '0'; - else if (ISLOWER(c)) + else if (Py_ISLOWER(c)) x = 10 + c - 'a'; else x = 10 + c - 'A'; x = x << 4; c = Py_CHARMASK(*s); s++; - if (ISDIGIT(c)) + if (Py_ISDIGIT(c)) x += c - '0'; - else if (ISLOWER(c)) + else if (Py_ISLOWER(c)) x += 10 + c - 'a'; else x += 10 + c - 'A'; @@ -1406,7 +1406,7 @@ do_strip(PyBytesObject *self, int striptype) i = 0; if (striptype != RIGHTSTRIP) { - while (i < len && ISSPACE(s[i])) { + while (i < len && Py_ISSPACE(s[i])) { i++; } } @@ -1415,7 +1415,7 @@ do_strip(PyBytesObject *self, int striptype) if (striptype != LEFTSTRIP) { do { j--; - } while (j >= i && ISSPACE(s[j])); + } while (j >= i && Py_ISSPACE(s[j])); j++; } @@ -2347,11 +2347,11 @@ hex_digit_to_int(Py_UNICODE c) { if (c >= 128) return -1; - if (ISDIGIT(c)) + if (Py_ISDIGIT(c)) return c - '0'; else { - if (ISUPPER(c)) - c = TOLOWER(c); + if (Py_ISUPPER(c)) + c = Py_TOLOWER(c); if (c >= 'a' && c <= 'f') return c - 'a' + 10; } diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index b67b8f9fb14..35d86009f12 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -757,9 +757,9 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) continue; if (*(f+1)=='S' || *(f+1)=='R' || *(f+1)=='A') ++callcount; - while (ISDIGIT((unsigned)*f)) + while (Py_ISDIGIT((unsigned)*f)) width = (width*10) + *f++ - '0'; - while (*++f && *f != '%' && !ISALPHA((unsigned)*f)) + while (*++f && *f != '%' && !Py_ISALPHA((unsigned)*f)) ; if (*f == 's') ++callcount; @@ -790,9 +790,9 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) #endif const char* p = f; width = 0; - while (ISDIGIT((unsigned)*f)) + while (Py_ISDIGIT((unsigned)*f)) width = (width*10) + *f++ - '0'; - while (*++f && *f != '%' && !ISALPHA((unsigned)*f)) + while (*++f && *f != '%' && !Py_ISALPHA((unsigned)*f)) ; /* skip the 'l' or 'z' in {%ld, %zd, %lu, %zu} since @@ -965,12 +965,12 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) zeropad = (*f == '0'); /* parse the width.precision part */ width = 0; - while (ISDIGIT((unsigned)*f)) + while (Py_ISDIGIT((unsigned)*f)) width = (width*10) + *f++ - '0'; precision = 0; if (*f == '.') { f++; - while (ISDIGIT((unsigned)*f)) + while (Py_ISDIGIT((unsigned)*f)) precision = (precision*10) + *f++ - '0'; } /* Handle %ld, %lu, %lld and %llu. */ @@ -1419,8 +1419,8 @@ normalize_encoding(const char *encoding, while (*e) { if (l == l_end) return 0; - if (ISUPPER(*e)) { - *l++ = TOLOWER(*e++); + if (Py_ISUPPER(*e)) { + *l++ = Py_TOLOWER(*e++); } else if (*e == '_') { *l++ = '-'; @@ -3790,7 +3790,7 @@ PyObject *PyUnicode_DecodeUnicodeEscape(const char *s, } for (i = 0; i < digits; ++i) { c = (unsigned char) s[i]; - if (!ISXDIGIT(c)) { + if (!Py_ISXDIGIT(c)) { endinpos = (s+i+1)-starts; if (unicode_decode_call_errorhandler( errors, &errorHandler, @@ -4156,7 +4156,7 @@ PyObject *PyUnicode_DecodeRawUnicodeEscape(const char *s, outpos = p-PyUnicode_AS_UNICODE(v); for (x = 0, i = 0; i < count; ++i, ++s) { c = (unsigned char)*s; - if (!ISXDIGIT(c)) { + if (!Py_ISXDIGIT(c)) { endinpos = s-starts; if (unicode_decode_call_errorhandler( errors, &errorHandler,