|
|
|
@ -73,7 +73,7 @@ _PyLong_Negate(PyLongObject **x_p) |
|
|
|
|
|
|
|
x = (PyLongObject *)*x_p; |
|
|
|
if (Py_REFCNT(x) == 1) { |
|
|
|
Py_SIZE(x) = -Py_SIZE(x); |
|
|
|
Py_SET_SIZE(x, -Py_SIZE(x)); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
@ -112,8 +112,9 @@ long_normalize(PyLongObject *v) |
|
|
|
|
|
|
|
while (i > 0 && v->ob_digit[i-1] == 0) |
|
|
|
--i; |
|
|
|
if (i != j) |
|
|
|
Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i; |
|
|
|
if (i != j) { |
|
|
|
Py_SET_SIZE(v, (Py_SIZE(v) < 0) ? -(i) : i); |
|
|
|
} |
|
|
|
return v; |
|
|
|
} |
|
|
|
|
|
|
|
@ -281,9 +282,10 @@ _PyLong_Copy(PyLongObject *src) |
|
|
|
} |
|
|
|
result = _PyLong_New(i); |
|
|
|
if (result != NULL) { |
|
|
|
Py_SIZE(result) = Py_SIZE(src); |
|
|
|
while (--i >= 0) |
|
|
|
Py_SET_SIZE(result, Py_SIZE(src)); |
|
|
|
while (--i >= 0) { |
|
|
|
result->ob_digit[i] = src->ob_digit[i]; |
|
|
|
} |
|
|
|
} |
|
|
|
return (PyObject *)result; |
|
|
|
} |
|
|
|
@ -318,7 +320,7 @@ PyLong_FromLong(long ival) |
|
|
|
if (!(abs_ival >> PyLong_SHIFT)) { |
|
|
|
v = _PyLong_New(1); |
|
|
|
if (v) { |
|
|
|
Py_SIZE(v) = sign; |
|
|
|
Py_SET_SIZE(v, sign); |
|
|
|
v->ob_digit[0] = Py_SAFE_DOWNCAST( |
|
|
|
abs_ival, unsigned long, digit); |
|
|
|
} |
|
|
|
@ -330,7 +332,7 @@ PyLong_FromLong(long ival) |
|
|
|
if (!(abs_ival >> 2*PyLong_SHIFT)) { |
|
|
|
v = _PyLong_New(2); |
|
|
|
if (v) { |
|
|
|
Py_SIZE(v) = 2*sign; |
|
|
|
Py_SET_SIZE(v, 2 * sign); |
|
|
|
v->ob_digit[0] = Py_SAFE_DOWNCAST( |
|
|
|
abs_ival & PyLong_MASK, unsigned long, digit); |
|
|
|
v->ob_digit[1] = Py_SAFE_DOWNCAST( |
|
|
|
@ -349,7 +351,7 @@ PyLong_FromLong(long ival) |
|
|
|
v = _PyLong_New(ndigits); |
|
|
|
if (v != NULL) { |
|
|
|
digit *p = v->ob_digit; |
|
|
|
Py_SIZE(v) = ndigits*sign; |
|
|
|
Py_SET_SIZE(v, ndigits * sign); |
|
|
|
t = abs_ival; |
|
|
|
while (t) { |
|
|
|
*p++ = Py_SAFE_DOWNCAST( |
|
|
|
@ -445,8 +447,9 @@ PyLong_FromDouble(double dval) |
|
|
|
frac = frac - (double)bits; |
|
|
|
frac = ldexp(frac, PyLong_SHIFT); |
|
|
|
} |
|
|
|
if (neg) |
|
|
|
Py_SIZE(v) = -(Py_SIZE(v)); |
|
|
|
if (neg) { |
|
|
|
Py_SET_SIZE(v, -(Py_SIZE(v))); |
|
|
|
} |
|
|
|
return (PyObject *)v; |
|
|
|
} |
|
|
|
|
|
|
|
@ -930,7 +933,7 @@ _PyLong_FromByteArray(const unsigned char* bytes, size_t n, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
Py_SIZE(v) = is_signed ? -idigit : idigit; |
|
|
|
Py_SET_SIZE(v, is_signed ? -idigit : idigit); |
|
|
|
return (PyObject *)long_normalize(v); |
|
|
|
} |
|
|
|
|
|
|
|
@ -1158,7 +1161,7 @@ PyLong_FromLongLong(long long ival) |
|
|
|
v = _PyLong_New(ndigits); |
|
|
|
if (v != NULL) { |
|
|
|
digit *p = v->ob_digit; |
|
|
|
Py_SIZE(v) = negative ? -ndigits : ndigits; |
|
|
|
Py_SET_SIZE(v, negative ? -ndigits : ndigits); |
|
|
|
t = abs_ival; |
|
|
|
while (t) { |
|
|
|
*p++ = (digit)(t & PyLong_MASK); |
|
|
|
@ -1201,7 +1204,7 @@ PyLong_FromSsize_t(Py_ssize_t ival) |
|
|
|
v = _PyLong_New(ndigits); |
|
|
|
if (v != NULL) { |
|
|
|
digit *p = v->ob_digit; |
|
|
|
Py_SIZE(v) = negative ? -ndigits : ndigits; |
|
|
|
Py_SET_SIZE(v, negative ? -ndigits : ndigits); |
|
|
|
t = abs_ival; |
|
|
|
while (t) { |
|
|
|
*p++ = (digit)(t & PyLong_MASK); |
|
|
|
@ -2443,7 +2446,7 @@ digit beyond the first. |
|
|
|
if (z == NULL) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
Py_SIZE(z) = 0; |
|
|
|
Py_SET_SIZE(z, 0); |
|
|
|
|
|
|
|
/* `convwidth` consecutive input digits are treated as a single |
|
|
|
* digit in base `convmultmax`. |
|
|
|
@ -2493,7 +2496,7 @@ digit beyond the first. |
|
|
|
assert(c < PyLong_BASE); |
|
|
|
if (Py_SIZE(z) < size_z) { |
|
|
|
*pz = (digit)c; |
|
|
|
++Py_SIZE(z); |
|
|
|
Py_SET_SIZE(z, Py_SIZE(z) + 1); |
|
|
|
} |
|
|
|
else { |
|
|
|
PyLongObject *tmp; |
|
|
|
@ -2532,7 +2535,7 @@ digit beyond the first. |
|
|
|
goto onError; |
|
|
|
} |
|
|
|
if (sign < 0) { |
|
|
|
Py_SIZE(z) = -(Py_SIZE(z)); |
|
|
|
Py_SET_SIZE(z, -(Py_SIZE(z))); |
|
|
|
} |
|
|
|
while (*str && Py_ISSPACE(*str)) { |
|
|
|
str++; |
|
|
|
@ -3165,7 +3168,7 @@ x_sub(PyLongObject *a, PyLongObject *b) |
|
|
|
} |
|
|
|
assert(borrow == 0); |
|
|
|
if (sign < 0) { |
|
|
|
Py_SIZE(z) = -Py_SIZE(z); |
|
|
|
Py_SET_SIZE(z, -Py_SIZE(z)); |
|
|
|
} |
|
|
|
return maybe_small_long(long_normalize(z)); |
|
|
|
} |
|
|
|
@ -3189,7 +3192,7 @@ long_add(PyLongObject *a, PyLongObject *b) |
|
|
|
That also means z is not an element of |
|
|
|
small_ints, so negating it in-place is safe. */ |
|
|
|
assert(Py_REFCNT(z) == 1); |
|
|
|
Py_SIZE(z) = -(Py_SIZE(z)); |
|
|
|
Py_SET_SIZE(z, -(Py_SIZE(z))); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
@ -3222,7 +3225,7 @@ long_sub(PyLongObject *a, PyLongObject *b) |
|
|
|
z = x_add(a, b); |
|
|
|
if (z != NULL) { |
|
|
|
assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1); |
|
|
|
Py_SIZE(z) = -(Py_SIZE(z)); |
|
|
|
Py_SET_SIZE(z, -(Py_SIZE(z))); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -3615,7 +3618,7 @@ k_lopsided_mul(PyLongObject *a, PyLongObject *b) |
|
|
|
/* Multiply the next slice of b by a. */ |
|
|
|
memcpy(bslice->ob_digit, b->ob_digit + nbdone, |
|
|
|
nbtouse * sizeof(digit)); |
|
|
|
Py_SIZE(bslice) = nbtouse; |
|
|
|
Py_SET_SIZE(bslice, nbtouse); |
|
|
|
product = k_mul(a, bslice); |
|
|
|
if (product == NULL) |
|
|
|
goto fail; |
|
|
|
@ -4431,7 +4434,7 @@ long_neg(PyLongObject *v) |
|
|
|
return PyLong_FromLong(-MEDIUM_VALUE(v)); |
|
|
|
z = (PyLongObject *)_PyLong_Copy(v); |
|
|
|
if (z != NULL) |
|
|
|
Py_SIZE(z) = -(Py_SIZE(v)); |
|
|
|
Py_SET_SIZE(z, -(Py_SIZE(v))); |
|
|
|
return (PyObject *)z; |
|
|
|
} |
|
|
|
|
|
|
|
@ -4576,7 +4579,7 @@ long_lshift1(PyLongObject *a, Py_ssize_t wordshift, digit remshift) |
|
|
|
return NULL; |
|
|
|
if (Py_SIZE(a) < 0) { |
|
|
|
assert(Py_REFCNT(z) == 1); |
|
|
|
Py_SIZE(z) = -Py_SIZE(z); |
|
|
|
Py_SET_SIZE(z, -Py_SIZE(z)); |
|
|
|
} |
|
|
|
for (i = 0; i < wordshift; i++) |
|
|
|
z->ob_digit[i] = 0; |
|
|
|
@ -4760,7 +4763,7 @@ long_bitwise(PyLongObject *a, |
|
|
|
|
|
|
|
/* Complement result if negative. */ |
|
|
|
if (negz) { |
|
|
|
Py_SIZE(z) = -(Py_SIZE(z)); |
|
|
|
Py_SET_SIZE(z, -(Py_SIZE(z))); |
|
|
|
z->ob_digit[size_z] = PyLong_MASK; |
|
|
|
v_complement(z->ob_digit, z->ob_digit, size_z+1); |
|
|
|
} |
|
|
|
@ -4907,8 +4910,9 @@ _PyLong_GCD(PyObject *aarg, PyObject *barg) |
|
|
|
T = -A; A = -B; B = T; |
|
|
|
T = -C; C = -D; D = T; |
|
|
|
} |
|
|
|
if (c != NULL) |
|
|
|
Py_SIZE(c) = size_a; |
|
|
|
if (c != NULL) { |
|
|
|
Py_SET_SIZE(c, size_a); |
|
|
|
} |
|
|
|
else if (Py_REFCNT(a) == 1) { |
|
|
|
Py_INCREF(a); |
|
|
|
c = a; |
|
|
|
@ -4920,12 +4924,13 @@ _PyLong_GCD(PyObject *aarg, PyObject *barg) |
|
|
|
goto error; |
|
|
|
} |
|
|
|
|
|
|
|
if (d != NULL) |
|
|
|
Py_SIZE(d) = size_a; |
|
|
|
if (d != NULL) { |
|
|
|
Py_SET_SIZE(d, size_a); |
|
|
|
} |
|
|
|
else if (Py_REFCNT(b) == 1 && size_a <= alloc_b) { |
|
|
|
Py_INCREF(b); |
|
|
|
d = b; |
|
|
|
Py_SIZE(d) = size_a; |
|
|
|
Py_SET_SIZE(d, size_a); |
|
|
|
} |
|
|
|
else { |
|
|
|
alloc_b = size_a; |
|
|
|
@ -5105,9 +5110,10 @@ long_subtype_new(PyTypeObject *type, PyObject *x, PyObject *obase) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
assert(PyLong_Check(newobj)); |
|
|
|
Py_SIZE(newobj) = Py_SIZE(tmp); |
|
|
|
for (i = 0; i < n; i++) |
|
|
|
Py_SET_SIZE(newobj, Py_SIZE(tmp)); |
|
|
|
for (i = 0; i < n; i++) { |
|
|
|
newobj->ob_digit[i] = tmp->ob_digit[i]; |
|
|
|
} |
|
|
|
Py_DECREF(tmp); |
|
|
|
return (PyObject *)newobj; |
|
|
|
} |
|
|
|
@ -5744,7 +5750,7 @@ _PyLong_Init(PyThreadState *tstate) |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
Py_SIZE(v) = size; |
|
|
|
Py_SET_SIZE(v, size); |
|
|
|
v->ob_digit[0] = (digit)abs(ival); |
|
|
|
|
|
|
|
tstate->interp->small_ints[i] = v; |
|
|
|
|