summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpooryorick <com.digitalsmarties@pooryorick.com>2016-07-11 08:09:33 (GMT)
committerpooryorick <com.digitalsmarties@pooryorick.com>2016-07-11 08:09:33 (GMT)
commitc2bfc705d7cf803d4244385effe1fb8596233c86 (patch)
treedcfef1de12e42d945e29bb24997aef7541ffd80b
parent60aac4bac55c5bd000122090794bee62b428db1c (diff)
downloadtcl-c2bfc705d7cf803d4244385effe1fb8596233c86.zip
tcl-c2bfc705d7cf803d4244385effe1fb8596233c86.tar.gz
tcl-c2bfc705d7cf803d4244385effe1fb8596233c86.tar.bz2
Change TclIsEmpty to TclCheckEmptyString. Check length instead of first char of
bytes.
-rw-r--r--generic/tclExecute.c10
-rw-r--r--generic/tclInt.h5
-rw-r--r--generic/tclStringObj.c14
3 files changed, 14 insertions, 15 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index f8de5a7..d2ab1a1 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -5447,10 +5447,10 @@ TEBCresume(
* for utf-8, strcmp can't do a simple memcmp.
*/
- if (TclIsEmpty(valuePtr) > 0) {
+ if (TclCheckEmptyString(valuePtr) > 0) {
s1 = "";
s1len = 0;
- switch (TclIsEmpty(value2Ptr)) {
+ switch (TclCheckEmptyString(value2Ptr)) {
case -1:
s2 = TclGetStringFromObj(value2Ptr, &s2len);
break;
@@ -5463,10 +5463,10 @@ TEBCresume(
s2 = "";
s2len = 0;
}
- } else if (TclIsEmpty(value2Ptr) > 0) {
+ } else if (TclCheckEmptyString(value2Ptr) > 0) {
s2 = "";
s2len = 0;
- switch (TclIsEmpty(valuePtr)) {
+ switch (TclCheckEmptyString(valuePtr)) {
case -1:
s1 = TclGetStringFromObj(valuePtr, &s1len);
break;
@@ -6210,7 +6210,7 @@ TEBCresume(
representation, whether one value is not a number.
*/
# define TclIsNotNumber(objPtr) ( \
- ( TclIsEmpty((objPtr)) > 0 \
+ ( TclCheckEmptyString((objPtr)) > 0 \
|| ( (objPtr)->bytes != NULL && \
TclParseNumber( \
interp, (objPtr), "number", NULL, -1, NULL, 0) != TCL_OK)) \
diff --git a/generic/tclInt.h b/generic/tclInt.h
index 817f17d..6cf2308 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -3926,6 +3926,7 @@ MODULE_SCOPE int TclCompileStreqOpCmd(Tcl_Interp *interp,
MODULE_SCOPE int TclCompileAssembleCmd(Tcl_Interp *interp,
Tcl_Parse *parsePtr, Command *cmdPtr,
struct CompileEnv *envPtr);
+MODULE_SCOPE int TclCheckEmptyString(Tcl_Obj *objPtr);
/*
* Functions defined in generic/tclVar.c and currenttly exported only for use
@@ -4412,10 +4413,10 @@ MODULE_SCOPE void TclDbInitNewObj(Tcl_Obj *objPtr, const char *file,
(((objPtr)->typePtr==&tclByteArrayType) && ((objPtr)->bytes==NULL))
#define TclIsPureDict(objPtr) \
- (((objPtr)->typePtr==&tclDictType) && ((objPtr)->bytes==NULL))
+ (((objPtr)->bytes==NULL) && ((objPtr)->typePtr==&tclDictType))
#define TclIsPureList(objPtr) \
- (((objPtr)->typePtr==&tclListType) && ((objPtr)->bytes==NULL))
+ (((objPtr)->bytes==NULL) && ((objPtr)->typePtr==&tclListType))
/*
*----------------------------------------------------------------
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index de3a82e..a500cc3 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -446,7 +446,7 @@ Tcl_GetCharLength(
/*
*----------------------------------------------------------------------
*
- * TclIsEmpty --
+ * TclCheckEmptyString --
*
* Determine whether the string value of an object is or would be the
* empty string, without generating a string representation.
@@ -460,13 +460,14 @@ Tcl_GetCharLength(
*----------------------------------------------------------------------
*/
int
-TclIsEmpty (
+TclCheckEmptyString (
Tcl_Obj *objPtr
) {
int length = -1;
+ enum result {EMPTY_UNKNOWN = -1, EMPTY_NO, EMPTY_YES};
if (objPtr->bytes == tclEmptyStringRep) {
- return 1;
+ return EMPTY_YES;
}
if (TclIsPureList(objPtr)) {
@@ -480,12 +481,9 @@ TclIsEmpty (
}
if (objPtr->bytes == NULL) {
- return -1;
- }
- if (objPtr->bytes[0] == '\0') {
- return 1;
+ return EMPTY_UNKNOWN;
}
- return 0;
+ return objPtr->length == 0;
}
/*