diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2018-02-15 19:54:00 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2018-02-15 19:54:00 (GMT) |
| commit | 701d9dbe89519d8d52b18d0e20140395e8a13682 (patch) | |
| tree | 88b69a647902dc781d19a4fb317f137af7867702 | |
| parent | 64ef84994aa9f4ad84bf70ecee9886c1cb6c8d5e (diff) | |
| parent | 2d54b6822452d67937fbcd365c9af9041f9f99f1 (diff) | |
| download | tcl-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.c | 6 | ||||
| -rw-r--r-- | generic/tclInt.h | 5 | ||||
| -rw-r--r-- | generic/tclObj.c | 8 |
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; |
