diff options
author | dgp <dgp@users.sourceforge.net> | 2005-04-05 16:56:08 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2005-04-05 16:56:08 (GMT) |
commit | a413cb1b70f4d1bfdd0e22082d9b817c94e560fa (patch) | |
tree | f1db1f152fc987d1d0b25c57a3acc942167a6412 /generic/tclUtil.c | |
parent | 17ec5a7e8039b2fe845126a294c0073b3d55bf95 (diff) | |
download | tcl-a413cb1b70f4d1bfdd0e22082d9b817c94e560fa.zip tcl-a413cb1b70f4d1bfdd0e22082d9b817c94e560fa.tar.gz tcl-a413cb1b70f4d1bfdd0e22082d9b817c94e560fa.tar.bz2 |
* 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]
Diffstat (limited to 'generic/tclUtil.c')
-rw-r--r-- | generic/tclUtil.c | 46 |
1 files changed, 3 insertions, 43 deletions
diff --git a/generic/tclUtil.c b/generic/tclUtil.c index 6f032f6..9b7d0ec 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.53 2004/12/13 22:11:35 dgp Exp $ + * RCS: @(#) $Id: tclUtil.c,v 1.54 2005/04/05 16:56:30 dgp Exp $ */ #include "tclInt.h" @@ -2300,32 +2300,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 @@ -2334,31 +2312,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 |