diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2017-11-03 12:15:08 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2017-11-03 12:15:08 (GMT) |
commit | 785f1059e494bc876676f93e06a6d66c4f87525c (patch) | |
tree | aad1a1e3f25432d66469a6f7b82c1d2ce49ca3db | |
parent | d33ee7bc07e1c461c4292dfe866e2400f2536367 (diff) | |
parent | 274ab123a800239134ffb7e63421a13f55b38b89 (diff) | |
download | tcl-785f1059e494bc876676f93e06a6d66c4f87525c.zip tcl-785f1059e494bc876676f93e06a6d66c4f87525c.tar.gz tcl-785f1059e494bc876676f93e06a6d66c4f87525c.tar.bz2 |
merge core-8-6-branch
-rw-r--r-- | generic/tclInt.h | 18 |
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 /* |