From 3296e696db4e46f63f7a5348ac977b2b0a32ecbc Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 29 Jun 2005 23:29:56 +0000 Subject: SF bug #1224347: int/long unification and hex() Hex longs now print with lowercase letters like their int counterparts. --- Lib/test/test_long.py | 2 +- Misc/NEWS | 3 +++ Objects/longobject.c | 4 ++-- Objects/stringobject.c | 16 +++++----------- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py index ac786bd..7b0c7b0 100644 --- a/Lib/test/test_long.py +++ b/Lib/test/test_long.py @@ -208,7 +208,7 @@ class LongTest(unittest.TestCase): digits = digits or [0] return '-'[:sign] + \ {8: '0', 10: '', 16: '0x'}[base] + \ - "".join(map(lambda i: "0123456789ABCDEF"[i], digits)) + "L" + "".join(map(lambda i: "0123456789abcdef"[i], digits)) + "L" def check_format_1(self, x): for base, mapper in (8, oct), (10, repr), (16, hex): diff --git a/Misc/NEWS b/Misc/NEWS index f1a0c88..8d86efd 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.5 alpha 1? Core and builtins ----------------- +- SF bug #1224347: hex longs now print with lowercase letters just + like their int counterparts. + - SF bug #1163563: the original fix for bug #1010677 ("thread Module Breaks PyGILState_Ensure()") broke badly in the case of multiple interpreter states; back out that fix and do a better job (see diff --git a/Objects/longobject.c b/Objects/longobject.c index e4fc553..1f328dd3 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -1090,7 +1090,7 @@ long_format(PyObject *aa, int base, int addL) assert(accumbits >= basebits); do { char cdigit = (char)(accum & (base - 1)); - cdigit += (cdigit < 10) ? '0' : 'A'-10; + cdigit += (cdigit < 10) ? '0' : 'a'-10; assert(p > PyString_AS_STRING(str)); *--p = cdigit; accumbits -= basebits; @@ -1144,7 +1144,7 @@ long_format(PyObject *aa, int base, int addL) digit nextrem = (digit)(rem / base); char c = (char)(rem - nextrem * base); assert(p > PyString_AS_STRING(str)); - c += (c < 10) ? '0' : 'A'-10; + c += (c < 10) ? '0' : 'a'-10; *--p = c; rem = nextrem; --ntostore; diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 176e0d2b..8a9dc52 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -3753,18 +3753,12 @@ _PyString_FormatLong(PyObject *val, int flags, int prec, int type, } /* Fix up case for hex conversions. */ - switch (type) { - case 'x': - /* Need to convert all upper case letters to lower case. */ + if (type == 'X') { + /* Need to convert all lower case letters to upper case. + and need to convert 0x to 0X (and -0x to -0X). */ for (i = 0; i < len; i++) - if (buf[i] >= 'A' && buf[i] <= 'F') - buf[i] += 'a'-'A'; - break; - case 'X': - /* Need to convert 0x to 0X (and -0x to -0X). */ - if (buf[sign + 1] == 'x') - buf[sign + 1] = 'X'; - break; + if (buf[i] >= 'a' && buf[i] <= 'x') + buf[i] -= 'a'-'A'; } *pbuf = buf; *plen = len; -- cgit v0.12