summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2017-11-03 12:15:08 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2017-11-03 12:15:08 (GMT)
commit785f1059e494bc876676f93e06a6d66c4f87525c (patch)
treeaad1a1e3f25432d66469a6f7b82c1d2ce49ca3db
parentd33ee7bc07e1c461c4292dfe866e2400f2536367 (diff)
parent274ab123a800239134ffb7e63421a13f55b38b89 (diff)
downloadtcl-785f1059e494bc876676f93e06a6d66c4f87525c.zip
tcl-785f1059e494bc876676f93e06a6d66c4f87525c.tar.gz
tcl-785f1059e494bc876676f93e06a6d66c4f87525c.tar.bz2
merge core-8-6-branch
-rw-r--r--generic/tclInt.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/generic/tclInt.h b/generic/tclInt.h
index 0b5ff0c..0d68e8e 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -2445,8 +2445,8 @@ typedef struct List {
#define TCL_EACH_COLLECT 1 /* Collect iteration result like [lmap] */
/*
- * Macros providing a faster path to integers: Tcl_GetLongFromObj everywhere,
- * Tcl_GetIntFromObj and TclGetIntForIndex on platforms where longs are ints.
+ * Macros providing a faster path to integers: Tcl_GetLongFromObj,
+ * Tcl_GetIntFromObj and TclGetIntForIndex.
*
* WARNING: these macros eval their args more than once.
*/
@@ -2467,9 +2467,17 @@ typedef struct List {
: TclGetIntForIndex((interp), (objPtr), (endValue), (idxPtr)))
#else
#define TclGetIntFromObj(interp, objPtr, intPtr) \
- Tcl_GetIntFromObj((interp), (objPtr), (intPtr))
-#define TclGetIntForIndexM(interp, objPtr, ignore, idxPtr) \
- TclGetIntForIndex(interp, objPtr, ignore, idxPtr)
+ (((objPtr)->typePtr == &tclIntType \
+ && (objPtr)->internalRep.longValue >= -(Tcl_WideInt)(UINT_MAX) \
+ && (objPtr)->internalRep.longValue <= (Tcl_WideInt)(UINT_MAX)) \
+ ? ((*(intPtr) = (objPtr)->internalRep.longValue), TCL_OK) \
+ : Tcl_GetIntFromObj((interp), (objPtr), (intPtr)))
+#define TclGetIntForIndexM(interp, objPtr, endValue, idxPtr) \
+ (((objPtr)->typePtr == &tclIntType \
+ && (objPtr)->internalRep.longValue >= INT_MIN \
+ && (objPtr)->internalRep.longValue <= INT_MAX) \
+ ? ((*(idxPtr) = (objPtr)->internalRep.longValue), TCL_OK) \
+ : TclGetIntForIndex((interp), (objPtr), (endValue), (idxPtr)))
#endif
/*