]> granicus.if.org Git - python/commitdiff
SF bug #1224347: int/long unification and hex()
authorRaymond Hettinger <python@rcn.com>
Wed, 29 Jun 2005 23:29:56 +0000 (23:29 +0000)
committerRaymond Hettinger <python@rcn.com>
Wed, 29 Jun 2005 23:29:56 +0000 (23:29 +0000)
Hex longs now print with lowercase letters like their int counterparts.

Lib/test/test_long.py
Misc/NEWS
Objects/longobject.c
Objects/stringobject.c

index ac786bd97c06dd8f322d2bf8e7dd827b02bda448..7b0c7b0798a49f25c2b7f6612ae67a0641a345ee 100644 (file)
@@ -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):
index f1a0c883c2bbf866e75b9bf3dadc60d5c5091115..8d86efde286cbbec1ab77ce6101be3bdb94f842b 100644 (file)
--- 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
index e4fc553a80c6c258efa4195249770573074d75fc..1f328dd35d07139516734ccb271f8bbf41d4c00b 100644 (file)
@@ -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;
index 176e0d2b611872c1ccc00e39ba1f7c497726a56d..8a9dc529f8b0138733c241b0caa09771a89eb9ab 100644 (file)
@@ -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;