summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2018-02-15 19:54:00 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2018-02-15 19:54:00 (GMT)
commit701d9dbe89519d8d52b18d0e20140395e8a13682 (patch)
tree88b69a647902dc781d19a4fb317f137af7867702
parent64ef84994aa9f4ad84bf70ecee9886c1cb6c8d5e (diff)
parent2d54b6822452d67937fbcd365c9af9041f9f99f1 (diff)
downloadtcl-701d9dbe89519d8d52b18d0e20140395e8a13682.zip
tcl-701d9dbe89519d8d52b18d0e20140395e8a13682.tar.gz
tcl-701d9dbe89519d8d52b18d0e20140395e8a13682.tar.bz2
Use internalRep.wideValue as internal representation for booleans. This simplifies the handling of "int" resp "boolean", sharing its internal representation.
-rw-r--r--generic/tclCmdMZ.c6
-rw-r--r--generic/tclInt.h5
-rw-r--r--generic/tclObj.c8
3 files changed, 6 insertions, 13 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index 1b49e5f..6f0299f 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.c
@@ -1572,10 +1572,8 @@ StringIsCmd(
string1 = TclGetStringFromObj(objPtr, &length1);
result = length1 == 0;
}
- } else if (((index == STR_IS_TRUE) &&
- objPtr->internalRep.longValue == 0)
- || ((index == STR_IS_FALSE) &&
- objPtr->internalRep.longValue != 0)) {
+ } else if ((objPtr->internalRep.wideValue != 0)
+ ? (index == STR_IS_FALSE) : (index == STR_IS_TRUE)) {
result = 0;
}
break;
diff --git a/generic/tclInt.h b/generic/tclInt.h
index 3d5ed0e..83fb420 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -2394,10 +2394,9 @@ typedef struct List {
*/
#define TclGetBooleanFromObj(interp, objPtr, boolPtr) \
- (((objPtr)->typePtr == &tclIntType) \
+ (((objPtr)->typePtr == &tclIntType \
+ || (objPtr)->typePtr == &tclBooleanType) \
? (*(boolPtr) = ((objPtr)->internalRep.wideValue!=0), TCL_OK) \
- : ((objPtr)->typePtr == &tclBooleanType) \
- ? (*(boolPtr) = ((objPtr)->internalRep.longValue!=0), TCL_OK) \
: Tcl_GetBooleanFromObj((interp), (objPtr), (boolPtr)))
#ifdef TCL_WIDE_INT_IS_LONG
diff --git a/generic/tclObj.c b/generic/tclObj.c
index 6b1ed2d..647a777 100644
--- a/generic/tclObj.c
+++ b/generic/tclObj.c
@@ -1720,14 +1720,10 @@ Tcl_GetBooleanFromObj(
register int *boolPtr) /* Place to store resulting boolean. */
{
do {
- if (objPtr->typePtr == &tclIntType) {
+ if (objPtr->typePtr == &tclIntType || objPtr->typePtr == &tclBooleanType) {
*boolPtr = (objPtr->internalRep.wideValue != 0);
return TCL_OK;
}
- if (objPtr->typePtr == &tclBooleanType) {
- *boolPtr = (int) objPtr->internalRep.longValue;
- return TCL_OK;
- }
if (objPtr->typePtr == &tclDoubleType) {
/*
* Caution: Don't be tempted to check directly for the "double"
@@ -1928,7 +1924,7 @@ ParseBoolean(
goodBoolean:
TclFreeIntRep(objPtr);
- objPtr->internalRep.longValue = newBool;
+ objPtr->internalRep.wideValue = newBool;
objPtr->typePtr = &tclBooleanType;
return TCL_OK;