summaryrefslogtreecommitdiffstats
path: root/generic/tclInt.h
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2018-02-22 21:17:14 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2018-02-22 21:17:14 (GMT)
commit07448025782175253319b1330ea0a1ab3cb0b5d0 (patch)
treea65b45bbea287fe45c91962dfd9e855ef5037f50 /generic/tclInt.h
parentcb2f9cccfbc8007a93a1010bbabe4614939b94a2 (diff)
parentf5bf130f05e3dcf636ef831f017d5672c594660a (diff)
downloadtcl-07448025782175253319b1330ea0a1ab3cb0b5d0.zip
tcl-07448025782175253319b1330ea0a1ab3cb0b5d0.tar.gz
tcl-07448025782175253319b1330ea0a1ab3cb0b5d0.tar.bz2
merge trunk
Diffstat (limited to 'generic/tclInt.h')
-rw-r--r--generic/tclInt.h17
1 files changed, 12 insertions, 5 deletions
diff --git a/generic/tclInt.h b/generic/tclInt.h
index d2bf8ab..8e84d31 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -2386,13 +2386,20 @@ typedef struct List {
#define TCL_EACH_COLLECT 1 /* Collect iteration result like [lmap] */
/*
- * Macros providing a faster path to integers: Tcl_GetLongFromObj,
- * Tcl_GetIntFromObj and TclGetIntForIndex.
+ * Macros providing a faster path to booleans and integers:
+ * Tcl_GetBooleanFromObj, Tcl_GetLongFromObj, Tcl_GetIntFromObj
+ * and TclGetIntForIndex.
*
* WARNING: these macros eval their args more than once.
*/
-#if (LONG_MAX == LLONG_MAX)
+#define TclGetBooleanFromObj(interp, objPtr, boolPtr) \
+ (((objPtr)->typePtr == &tclIntType \
+ || (objPtr)->typePtr == &tclBooleanType) \
+ ? (*(boolPtr) = ((objPtr)->internalRep.wideValue!=0), TCL_OK) \
+ : Tcl_GetBooleanFromObj((interp), (objPtr), (boolPtr)))
+
+#ifdef TCL_WIDE_INT_IS_LONG
#define TclGetLongFromObj(interp, objPtr, longPtr) \
(((objPtr)->typePtr == &tclIntType) \
? ((*(longPtr) = (objPtr)->internalRep.wideValue), TCL_OK) \
@@ -2410,13 +2417,13 @@ typedef struct List {
(((objPtr)->typePtr == &tclIntType \
&& (objPtr)->internalRep.wideValue >= -(Tcl_WideInt)(UINT_MAX) \
&& (objPtr)->internalRep.wideValue <= (Tcl_WideInt)(UINT_MAX)) \
- ? ((*(intPtr) = (objPtr)->internalRep.wideValue), TCL_OK) \
+ ? ((*(intPtr) = (int)(objPtr)->internalRep.wideValue), TCL_OK) \
: Tcl_GetIntFromObj((interp), (objPtr), (intPtr)))
#define TclGetIntForIndexM(interp, objPtr, endValue, idxPtr) \
(((objPtr)->typePtr == &tclIntType \
&& (objPtr)->internalRep.wideValue >= INT_MIN \
&& (objPtr)->internalRep.wideValue <= INT_MAX) \
- ? ((*(idxPtr) = (objPtr)->internalRep.wideValue), TCL_OK) \
+ ? ((*(idxPtr) = (int)(objPtr)->internalRep.wideValue), TCL_OK) \
: TclGetIntForIndex((interp), (objPtr), (endValue), (idxPtr)))
/*