summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--generic/tclExecute.c8
-rw-r--r--generic/tclUtil.c46
3 files changed, 13 insertions, 49 deletions
diff --git a/ChangeLog b/ChangeLog
index 100c77c..10cdeac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2005-04-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (ExprSrandFunc): Replaced incursions into the
+ * generic/tclUtil.c (TclGetIntForIndex): intreps of numeric types
+ with simpler calls of Tcl_GetIntFromObj and Tcl_GetLongFromObj,
+ now that those routines are better behaved wrt shimmering.
+ [Patch 1177219]
+
2005-03-29 Jeff Hobbs <jeffh@ActiveState.com>
* win/tcl.m4, win/configure: do not require cygpath in macros to
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 99e1d67..2809466 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclExecute.c,v 1.94.2.11 2005/02/01 17:26:32 dgp Exp $
+ * RCS: @(#) $Id: tclExecute.c,v 1.94.2.12 2005/04/05 16:40:11 dgp Exp $
*/
#include "tclInt.h"
@@ -5555,11 +5555,7 @@ ExprSrandFunc(interp, eePtr, clientData)
goto badValue;
}
- if (valuePtr->typePtr == &tclIntType) {
- i = valuePtr->internalRep.longValue;
- } else if (valuePtr->typePtr == &tclWideIntType) {
- TclGetLongFromWide(i,valuePtr);
- } else {
+ if (Tcl_GetLongFromObj(NULL, valuePtr, &i) != TCL_OK) {
/*
* At this point, the only other possible type is double
*/
diff --git a/generic/tclUtil.c b/generic/tclUtil.c
index 59872ce..57fc6e0 100644
--- a/generic/tclUtil.c
+++ b/generic/tclUtil.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclUtil.c,v 1.36.2.5 2004/10/14 15:28:39 dkf Exp $
+ * RCS: @(#) $Id: tclUtil.c,v 1.36.2.6 2005/04/05 16:40:16 dgp Exp $
*/
#include "tclInt.h"
@@ -2276,32 +2276,10 @@ TclGetIntForIndex(interp, objPtr, endValue, indexPtr)
int *indexPtr; /* Location filled in with an integer
* representing an index. */
{
- char *bytes;
- int offset;
- Tcl_WideInt wideOffset;
-
- /*
- * If the object is already an integer, use it.
- */
-
- if (objPtr->typePtr == &tclIntType) {
- *indexPtr = (int)objPtr->internalRep.longValue;
+ if (Tcl_GetIntFromObj(NULL, objPtr, indexPtr) == TCL_OK) {
return TCL_OK;
}
- /*
- * If the object is already a wide-int, and it is not out of range
- * for an integer, use it. [Bug #526717]
- */
- if (objPtr->typePtr == &tclWideIntType) {
- TclGetWide(wideOffset,objPtr);
- if (wideOffset >= Tcl_LongAsWide(INT_MIN)
- && wideOffset <= Tcl_LongAsWide(INT_MAX)) {
- *indexPtr = (int) Tcl_WideAsLong(wideOffset);
- return TCL_OK;
- }
- }
-
if (SetEndOffsetFromAny(NULL, objPtr) == TCL_OK) {
/*
* If the object is already an offset from the end of the
@@ -2310,31 +2288,13 @@ TclGetIntForIndex(interp, objPtr, endValue, indexPtr)
*indexPtr = endValue + objPtr->internalRep.longValue;
- } else if (Tcl_GetWideIntFromObj(NULL, objPtr, &wideOffset) == TCL_OK) {
- /*
- * If the object can be converted to a wide integer, use
- * that. [Bug #526717]
- */
-
- offset = (int) Tcl_WideAsLong(wideOffset);
- if (Tcl_LongAsWide(offset) == wideOffset) {
- /*
- * But it is representable as a narrow integer, so we
- * prefer that (so preserving old behaviour in the
- * majority of cases.)
- */
- objPtr->typePtr = &tclIntType;
- objPtr->internalRep.longValue = offset;
- }
- *indexPtr = offset;
-
} else {
/*
* Report a parse error.
*/
if (interp != NULL) {
- bytes = Tcl_GetString(objPtr);
+ char *bytes = Tcl_GetString(objPtr);
/*
* The result might not be empty; this resets it which
* should be both a cheap operation, and of little problem