From f67da7eac043413a7e37d04e4ff19fcb39bafc58 Mon Sep 17 00:00:00 2001 From: dgp Date: Tue, 5 Apr 2005 16:39:58 +0000 Subject: * 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] --- ChangeLog | 8 ++++++++ generic/tclExecute.c | 8 ++------ generic/tclUtil.c | 46 +++------------------------------------------- 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 + + * 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 * 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 -- cgit v0.12