summaryrefslogtreecommitdiffstats
path: root/generic/tclObj.c
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2019-04-19 00:38:32 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2019-04-19 00:38:32 (GMT)
commit28863a761275880bb39f71acd0793457cb9aa932 (patch)
treed5f2cd9466dd16778484e8ac11d072efe498c19d /generic/tclObj.c
parent63942f2e8d2f02745918ec17e0aca4819066df63 (diff)
parent8b9a3558a42cba96fe30f272517260aef43ec7f8 (diff)
downloadtcl-28863a761275880bb39f71acd0793457cb9aa932.zip
tcl-28863a761275880bb39f71acd0793457cb9aa932.tar.gz
tcl-28863a761275880bb39f71acd0793457cb9aa932.tar.bz2
merge 8.7
Diffstat (limited to 'generic/tclObj.c')
-rw-r--r--generic/tclObj.c29
1 files changed, 9 insertions, 20 deletions
diff --git a/generic/tclObj.c b/generic/tclObj.c
index 089945e..42d8fde 100644
--- a/generic/tclObj.c
+++ b/generic/tclObj.c
@@ -191,17 +191,6 @@ static Tcl_ThreadDataKey pendingObjDataKey;
| ((bignum).alloc << 15) | ((bignum).used)); \
}
-#define UNPACK_BIGNUM(objPtr, bignum) \
- if ((objPtr)->internalRep.twoPtrValue.ptr2 == INT2PTR(-1)) { \
- (bignum) = *((mp_int *) ((objPtr)->internalRep.twoPtrValue.ptr1)); \
- } else { \
- (bignum).dp = (objPtr)->internalRep.twoPtrValue.ptr1; \
- (bignum).sign = PTR2INT((objPtr)->internalRep.twoPtrValue.ptr2) >> 30; \
- (bignum).alloc = \
- (PTR2INT((objPtr)->internalRep.twoPtrValue.ptr2) >> 15) & 0x7fff; \
- (bignum).used = PTR2INT((objPtr)->internalRep.twoPtrValue.ptr2) & 0x7fff; \
- }
-
/*
* Prototypes for functions defined later in this file:
*/
@@ -2330,7 +2319,7 @@ Tcl_GetDoubleFromObj(
if (objPtr->typePtr == &tclBignumType) {
mp_int big;
- UNPACK_BIGNUM(objPtr, big);
+ TclUnpackBignum(objPtr, big);
*dblPtr = TclBignumToDouble(&big);
return TCL_OK;
}
@@ -2714,7 +2703,7 @@ Tcl_GetLongFromObj(
unsigned long scratch, value = 0, numBytes = sizeof(unsigned long);
unsigned char *bytes = (unsigned char *) &scratch;
- UNPACK_BIGNUM(objPtr, big);
+ TclUnpackBignum(objPtr, big);
if (mp_to_unsigned_bin_n(&big, bytes, &numBytes) == MP_OKAY) {
while (numBytes-- > 0) {
value = (value << CHAR_BIT) | *bytes++;
@@ -2954,7 +2943,7 @@ Tcl_GetWideIntFromObj(
Tcl_WideInt scratch;
unsigned char *bytes = (unsigned char *) &scratch;
- UNPACK_BIGNUM(objPtr, big);
+ TclUnpackBignum(objPtr, big);
if (mp_to_unsigned_bin_n(&big, bytes, &numBytes) == MP_OKAY) {
while (numBytes-- > 0) {
value = (value << CHAR_BIT) | *bytes++;
@@ -3068,7 +3057,7 @@ FreeBignum(
{
mp_int toFree; /* Bignum to free */
- UNPACK_BIGNUM(objPtr, toFree);
+ TclUnpackBignum(objPtr, toFree);
mp_clear(&toFree);
if (PTR2INT(objPtr->internalRep.twoPtrValue.ptr2) < 0) {
Tcl_Free(objPtr->internalRep.twoPtrValue.ptr1);
@@ -3101,7 +3090,7 @@ DupBignum(
mp_int bignumCopy;
copyPtr->typePtr = &tclBignumType;
- UNPACK_BIGNUM(srcPtr, bignumVal);
+ TclUnpackBignum(srcPtr, bignumVal);
if (mp_init_copy(&bignumCopy, &bignumVal) != MP_OKAY) {
Tcl_Panic("initialization failure in DupBignum");
}
@@ -3136,7 +3125,7 @@ UpdateStringOfBignum(
int size;
char *stringVal;
- UNPACK_BIGNUM(objPtr, bignumVal);
+ TclUnpackBignum(objPtr, bignumVal);
if (MP_OKAY != mp_radix_size(&bignumVal, 10, &size)) {
Tcl_Panic("radix size failure in UpdateStringOfBignum");
}
@@ -3275,10 +3264,10 @@ GetBignumFromObj(
if (copy || Tcl_IsShared(objPtr)) {
mp_int temp;
- UNPACK_BIGNUM(objPtr, temp);
+ TclUnpackBignum(objPtr, temp);
mp_init_copy(bignumValue, &temp);
} else {
- UNPACK_BIGNUM(objPtr, *bignumValue);
+ TclUnpackBignum(objPtr, *bignumValue);
/* Optimized TclFreeIntRep */
objPtr->internalRep.twoPtrValue.ptr1 = NULL;
objPtr->internalRep.twoPtrValue.ptr2 = NULL;
@@ -3518,7 +3507,7 @@ TclGetNumberFromObj(
static Tcl_ThreadDataKey bignumKey;
mp_int *bigPtr = Tcl_GetThreadData(&bignumKey, sizeof(mp_int));
- UNPACK_BIGNUM(objPtr, *bigPtr);
+ TclUnpackBignum(objPtr, *bigPtr);
*typePtr = TCL_NUMBER_BIG;
*clientDataPtr = bigPtr;
return TCL_OK;