diff options
Diffstat (limited to 'Objects/longobject.c')
-rw-r--r-- | Objects/longobject.c | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/Objects/longobject.c b/Objects/longobject.c index 9fb5832..3ee2992 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -35,7 +35,6 @@ static PyLongObject *long_normalize(PyLongObject *); static PyLongObject *mul1(PyLongObject *, wdigit); static PyLongObject *muladd1(PyLongObject *, wdigit, wdigit); static PyLongObject *divrem1(PyLongObject *, digit, digit *); -static PyObject *long_format(PyObject *aa, int base, int addL); #define SIGCHECK(PyTryBlock) \ if (--_Py_Ticker < 0) { \ @@ -1140,7 +1139,7 @@ muladd1(PyLongObject *a, wdigit n, wdigit extra) /* Divide long pin, w/ size digits, by non-zero digit n, storing quotient in pout, and returning the remainder. pin and pout point at the LSD. It's OK for pin == pout on entry, which saves oodles of mallocs/frees in - long_format, but that should be done with great care since longs are + _PyLong_Format, but that should be done with great care since longs are immutable. */ static digit @@ -1178,12 +1177,13 @@ divrem1(PyLongObject *a, digit n, digit *prem) return long_normalize(z); } -/* Convert a long int object to a string, using a given conversion base. - Return a string object. - If base is 8 or 16, add the proper prefix '0' or '0x'. */ - -static PyObject * -long_format(PyObject *aa, int base, int addL) +/* Convert the long to a string object with given base, + appending a base prefix of 0[box] if base is 2, 8 or 16. + Add a trailing "L" if addL is non-zero. + If newstyle is zero, then use the pre-2.6 behavior of octal having + a leading "0", instead of the prefix "0o" */ +PyAPI_FUNC(PyObject *) +_PyLong_Format(PyObject *aa, int base, int addL, int newstyle) { register PyLongObject *a = (PyLongObject *)aa; PyStringObject *str; @@ -1309,9 +1309,18 @@ long_format(PyObject *aa, int base, int addL) Py_DECREF(scratch); } - if (base == 8) { - if (size_a != 0) + if (base == 2) { + *--p = 'b'; + *--p = '0'; + } + else if (base == 8) { + if (newstyle) { + *--p = 'o'; *--p = '0'; + } + else + if (size_a != 0) + *--p = '0'; } else if (base == 16) { *--p = 'x'; @@ -1888,13 +1897,13 @@ long_dealloc(PyObject *v) static PyObject * long_repr(PyObject *v) { - return long_format(v, 10, 1); + return _PyLong_Format(v, 10, 1, 0); } static PyObject * long_str(PyObject *v) { - return long_format(v, 10, 0); + return _PyLong_Format(v, 10, 0, 0); } static int @@ -3268,13 +3277,13 @@ long_float(PyObject *v) static PyObject * long_oct(PyObject *v) { - return long_format(v, 8, 1); + return _PyLong_Format(v, 8, 1, 0); } static PyObject * long_hex(PyObject *v) { - return long_format(v, 16, 1); + return _PyLong_Format(v, 16, 1, 0); } static PyObject * |