You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
assignee='https://github.com/mdickinson'closed_at=<Date2009-02-15.11:06:53.327>created_at=<Date2009-02-14.17:44:49.219>labels= ['interpreter-core', 'type-bug']
title='longobject.c: minor fixes, cleanups and optimizations'updated_at=<Date2009-02-15.11:06:53.316>user='https://github.com/mdickinson'
Here are various minor portability and standards-compliance fixes,
optimizations and cleanups for the trunk version of Objects/longobject.c. Most of these also apply to py3k.
I'll admit to an ulterior motive here: the aim is to extract all
the trivial, non-behaviour-changing pieces of the 30-bit longdigit
patch (bpo-4258), in order to make that patch easier to review.
A good few of the changes here are designed to weaken the assumptions
about the relative sizes of digit, int and long.
Detailed contents of this patch:
make longs smaller by being more careful about tp_basicsize: it's
defined as offsetof(PyLongObject, ob_digit) instead of the previous
sizeof(PyLongObject) - sizeof(digit). On average, this saves 2
bytes per long on 32-bit platforms and 6 bytes per
long on 64-bit platforms. This is similar to the fix that's already
in py3k, but more portable since it doesn't make assumptions about
the amount of padding between the PyVarObject head and the long
add overflow check in _PyLong_New
replace double cast (double -> long -> digit) in PyLong_FromDouble
with a single double -> digit cast.
int -> Py_ssize_t fixes in _PyLong_FromByteArray.
fix bogus overflow check in _PyLong_FromByteArray.
inline muladd1 into mul1
simplify long_hash (without changing its semantics in any way):
there's no need for the masking when rotating x; everything in
sight is unsigned and unambiguous.
make PyLong_MASK unsigned (of type digit); this is safer, since
it's used in many bitwise operations.