summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2017-11-07 16:16:52 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2017-11-07 16:16:52 (GMT)
commit42764c99bec23aaae227ff1aba60c1ff9e7d9230 (patch)
tree14443b22c4988f8f78a90f4aea972bd7d972ecd7 /generic
parentf941597e4348b467b5cfe51e8572dcc474a38a7e (diff)
downloadtcl-42764c99bec23aaae227ff1aba60c1ff9e7d9230.zip
tcl-42764c99bec23aaae227ff1aba60c1ff9e7d9230.tar.gz
tcl-42764c99bec23aaae227ff1aba60c1ff9e7d9230.tar.bz2
More code simplifications, with still equal functionality.
Diffstat (limited to 'generic')
-rw-r--r--generic/tclExecute.c6
-rw-r--r--generic/tclObj.c33
-rw-r--r--generic/tclStrToD.c40
3 files changed, 11 insertions, 68 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 51f9bff..68056c6 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -5776,7 +5776,7 @@ TEBCresume(
{
ClientData ptr1, ptr2;
int type1, type2;
- Tcl_WideInt w1, w2, wResult;
+ Tcl_WideInt w1, w2, wResult;
case INST_NUM_TYPE:
if (GetNumberFromObj(NULL, OBJ_AT_TOS, &ptr1, &type1) != TCL_OK) {
@@ -5787,9 +5787,7 @@ TEBCresume(
/* [string is wideinteger] is -UWIDE_MAX to UWIDE_MAX range */
int i;
- if (Tcl_GetIntFromObj(NULL, OBJ_AT_TOS, &i) != TCL_OK) {
- type1 = TCL_NUMBER_WIDE;
- } else {
+ if (Tcl_GetIntFromObj(NULL, OBJ_AT_TOS, &i) == TCL_OK) {
type1 = TCL_NUMBER_LONG;
}
} else if (type1 == TCL_NUMBER_BIG) {
diff --git a/generic/tclObj.c b/generic/tclObj.c
index 04fdeaa..634f8db 100644
--- a/generic/tclObj.c
+++ b/generic/tclObj.c
@@ -3393,38 +3393,12 @@ Tcl_SetBignumObj(
Tcl_Panic("%s called with shared object", "Tcl_SetBignumObj");
}
if ((size_t) bignumValue->used
- <= (CHAR_BIT * sizeof(long) + DIGIT_BIT - 1) / DIGIT_BIT) {
- unsigned long value = 0, numBytes = sizeof(long);
- long scratch;
+ <= (CHAR_BIT * sizeof(Tcl_WideUInt) + DIGIT_BIT - 1) / DIGIT_BIT) {
+ Tcl_WideUInt value = 0, numBytes = sizeof(Tcl_WideUInt);
+ Tcl_WideUInt scratch;
unsigned char *bytes = (unsigned char *) &scratch;
if (mp_to_unsigned_bin_n(bignumValue, bytes, &numBytes) != MP_OKAY) {
- goto tooLargeForLong;
- }
- while (numBytes-- > 0) {
- value = (value << CHAR_BIT) | *bytes++;
- }
- if (value > (((~(unsigned long)0) >> 1) + bignumValue->sign)) {
- goto tooLargeForLong;
- }
- if (bignumValue->sign) {
- TclSetWideObj(objPtr, -(long)value);
- } else {
- TclSetWideObj(objPtr, (long)value);
- }
- mp_clear(bignumValue);
- return;
- }
- tooLargeForLong:
-#ifndef TCL_WIDE_INT_IS_LONG
- if ((size_t) bignumValue->used
- <= (CHAR_BIT * sizeof(Tcl_WideInt) + DIGIT_BIT - 1) / DIGIT_BIT) {
- Tcl_WideUInt value = 0;
- unsigned long numBytes = sizeof(Tcl_WideInt);
- Tcl_WideInt scratch;
- unsigned char *bytes = (unsigned char *)&scratch;
-
- if (mp_to_unsigned_bin_n(bignumValue, bytes, &numBytes) != MP_OKAY) {
goto tooLargeForWide;
}
while (numBytes-- > 0) {
@@ -3442,7 +3416,6 @@ Tcl_SetBignumObj(
return;
}
tooLargeForWide:
-#endif
TclInvalidateStringRep(objPtr);
TclFreeIntRep(objPtr);
TclSetBignumIntRep(objPtr, bignumValue);
diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c
index 9663c21..ac2ca68 100644
--- a/generic/tclStrToD.c
+++ b/generic/tclStrToD.c
@@ -1268,21 +1268,7 @@ TclParseNumber(
}
}
if (!octalSignificandOverflow) {
- if (octalSignificandWide >
- (Tcl_WideUInt)(((~(unsigned long)0) >> 1) + signum)) {
-#ifndef TCL_WIDE_INT_IS_LONG
- if (octalSignificandWide <= (MOST_BITS + signum)) {
- objPtr->typePtr = &tclIntType;
- if (signum) {
- objPtr->internalRep.wideValue =
- - (Tcl_WideInt) octalSignificandWide;
- } else {
- objPtr->internalRep.wideValue =
- (Tcl_WideInt) octalSignificandWide;
- }
- break;
- }
-#endif
+ if (octalSignificandWide > (MOST_BITS + signum)) {
TclInitBignumFromWideUInt(&octalSignificandBig,
octalSignificandWide);
octalSignificandOverflow = 1;
@@ -1290,10 +1276,10 @@ TclParseNumber(
objPtr->typePtr = &tclIntType;
if (signum) {
objPtr->internalRep.wideValue =
- - (long) octalSignificandWide;
+ - (Tcl_WideInt) octalSignificandWide;
} else {
objPtr->internalRep.wideValue =
- (long) octalSignificandWide;
+ (Tcl_WideInt) octalSignificandWide;
}
}
}
@@ -1315,21 +1301,7 @@ TclParseNumber(
}
returnInteger:
if (!significandOverflow) {
- if (significandWide >
- (Tcl_WideUInt)(((~(unsigned long)0) >> 1) + signum)) {
-#ifndef TCL_WIDE_INT_IS_LONG
- if (significandWide <= MOST_BITS+signum) {
- objPtr->typePtr = &tclIntType;
- if (signum) {
- objPtr->internalRep.wideValue =
- - (Tcl_WideInt) significandWide;
- } else {
- objPtr->internalRep.wideValue =
- (Tcl_WideInt) significandWide;
- }
- break;
- }
-#endif
+ if (significandWide > MOST_BITS+signum) {
TclInitBignumFromWideUInt(&significandBig,
significandWide);
significandOverflow = 1;
@@ -1337,10 +1309,10 @@ TclParseNumber(
objPtr->typePtr = &tclIntType;
if (signum) {
objPtr->internalRep.wideValue =
- - (long) significandWide;
+ - (Tcl_WideInt) significandWide;
} else {
objPtr->internalRep.wideValue =
- (long) significandWide;
+ (Tcl_WideInt) significandWide;
}
}
}